2023-06-27

XSLTの基礎

XMLに関連する技術のひとつに「XSLT」があります。XML文書の構造を変更するために使わるという概念は、難しくないのですが、具体的に、何をどうするのか分かりません。W3Cのサイトには「XSL Transformations (XSLT) Version 1.0」がありますが、規格書を読んでも、深みにはまるだけではないかという恐れを抱いていました。

 

手っ取り早い参考書として、O'REILLYの『XSLT』(Doug Tidwell)を買ってみました。2001年に出た初版本ですし、Abebooks経由の古本ですが、XSLTを勉強し始めた初心者には十分です。

 

まだ読み始めたばかりですが、第2章の「The Obligatory Hello World Example」が参考になりそうです。以下のようなシンプルなXML文書をXSLTで変換する例が示されています。

 <?xml version="1.0"?>

<greeting>

    Hello, World!

</greeting>

 

このような例は、本書以外でも登場しそうですが、僕が気に入ったのは以下の点です。

  1. XSLTで変換するのが、HTMLだけではなく、PDF、Javaプログラムなどもある。
  2. XSLTの例示が複数あって、いろいろな書き方が考えられることを例示している。

 

XML文書をXSLTを用いてHTMLに変換する例は、よくありますが、Javaプログラムにも変換できるとは知りませんでした。Javaに出来るなら、PythonやAWK(!)にだってできるでしょう。

 

新刊としては約$40だったようですが、古本なので$4くらいでした。さらに送料が$6ちょっと必要で、今は円安なので、最終的に日本円としては千五百円ほどです。激安という訳ではありません。

2023-06-13

Schemeの「継続」という概念

近所の図書館で『プログラミング言語SCHEME』を借り、これを読みながらSchemeを勉強しています。SCHEMEはLISPから派生した言語ですから、LISP独特のS式であるとか、ドット対のような、他のプログラミング言語には見られないような特徴があります。これらは独特ですが、理解するのが難しいというものではないと思います。


SCHEMEにおける難しい概念のひとつは、「継続」(「コンティニュエーション」と表現している場合もあるようです)だと思います。前述した書籍の「第3章 続Scheme」の「3.3.継続」では次のように説明されています。

call/ccには1引数のプロシージャpを渡す必要があります。するとまず、call/ccは現在の継続を獲得し、それをpに引き渡します。この時の継続自身は、kというプロシージャの形で表現されています。そしてkに値を引き渡して適用する毎に、その値がcall/ccを適用した際の継続に返されるのです。そしてこの値が、call/ccの適用における実質上の値となります。

また、kを起動せずにpが完了した場合、そのプロシージャが返す値がcall/ccの適用における値となります。

 

Schemeに慣れたら何でもないことなのでしょうが、まだ学び始めたばかりの段階の者にとっては、何を言っているか見当もつきません。「継続」でSchemeに躓くひとは少なくないようで、Webを調べていたら「Appendix 3. 継続についてもう少し」という記事を見つけました。これ以外にも「継続」について解説した記事がWeb上にはあるようですから、いろいろと読んでみたり、MIT Schemeで動作を確認してみたりして、概念を理解しようと思います。


前述した書籍には「以下は、再帰からの非局所的な脱出を行う、call/ccの使い方を示したサンプルです。」というような記述もありました。まだSchemeの「継続」が何なのか理解していませんが、C言語のライブラリにある「setjmpとlongjmp はどのように実現されているのか」のようなものかとも感じました。

2023-06-12

MIT SCHEMEを学ぶ

有名な教科書である『計算機プログラムの構造と解釈』を学ぶ下準備としてSCHEMEを調べています。SCHEMEは仕様がコンパクトにまとまっていると言われていて、確かにそういう感じです。ただし、多くの実装が存在するので、どれを選んだら良いのか混乱します。また現実問題として、コンパクトな仕様の範囲では済まないことが多いようで、「Scheme requests for implementation」というものがあるようです。

 

ひとまずMIT SCHEMEを使ってみることにしました。SCHEMEはLISPの一種なので、入門書の最初はS式の話題から始まることが多いです。次第にSCHEME独特の機能の説明がなされますが、仕様がコンパクトなので、一通り全体像をつかむのは、それほど難しくはないんじゃないかと思います。

 

基本を学んだら、何か応用的なプログラムを組んでみたいところですが、そうなると基本機能だけでは済まなくなってきます。MIT SCHEMEの公式サイトでは「MIT/GNU Scheme Reference」が置いてあるので、これに目を通しておくほうがよいのではないかという気がしてきました。使用可能なSRFIについても書いてありますが、かなり膨大です。それを使わなくても、自分で実装することは可能かもしれませんが、既に存在するものを独自に作るのは「車輪の再発明」とも言われており、あまり推奨されません。またSCHEMEらしさを知るには、さきほどのドキュメントにあるものを使っていくほうが良いと思います。 

 

PDF版では500頁弱もあるドキュメントなので、簡単に読める量ではありませんが、どんなものがあるのか、ざっと目を通しておこうと思っています。

2023-06-09

SICPのEmacs Infoファイル

Webで「SICP and Emacs」という記事を見かけました。計算機科学の教科書として著名な「Structure and Interpretation of Computer Programs」(略称:SICP、日本語訳:計算機プログラムの構造と解釈)が、EmacsのInfoファイルで読めるのだそうです。ただし、日本語訳が読めるわけではなく、読めるのは原文(英文)です。

 

実際にファイルが置いてあるのは「SICP in Texinfo Format」です。ここには既にInfoファイルとしてコンパイル済のファイルが置いてあるので、ダウンロードするだけでした。

 

ホームディレクトリに「~/info」を作って、そこにダウンロードしたファイルと「dir」を置きました。またemacsの初期化ファイルに、以下の行を追加しました。

(setq Info-default-directory-list
      (append Info-default-directory-list (list (expand-file-name "~/info"))))


2023-06-06

When can you get a copy of the contract?

TOEICの勉強のため『 極めろ! リスニング解答力 TOEIC® L&R TEST 』で勉強しています。TOEIC PART 2の問題として、以下のような例文がありました。

A: When can you get a copy of the contract?

B: Right after it's signed.

 

この訳は以下のようになっています。

A:いつ契約書の写しをもらえるんですか?

B:署名後すぐにです。

 

訳文を見ると、Aの発言では、隠れた主語が「私は」であるように思います。しかし英文の方では主語が「you」になっていますから、主語だけを見たら、「(あなたは)いつ契約書の写しを(私に)提供するつもりなのか?」という意味のように受け取れます。しかし動詞が「get」なので、そのような訳文として理解するのは変だとも思います。


ニュアンスで理解するなら「いつ契約書の写しをもらえるんですか?」でも「いつ契約書の写しを提供するつもりなのか?」でも、似たようなものかもしれません。しかし英文と訳文の関係が腑に落ちません。考え方によっては、英文ではそのように言うのだから、愚図愚図理屈をこねまわさずに、そのまま覚えたら良いんだと言われそうです。


語学では理屈通りにはならない事もあるのは仕方ないことだとは考えます。しかし、そればかりだと、とにかく丸暗記という安易な方向に流れてしまいそうです。できるだけ、背後にある理由に納得できるようにしておきたいと、思っています。


河川賊

NHK出版から「世界史のリテラシー」というシリーズの刊行が始まり、『少女は、なぜフランスを救えたのか―ジャンヌ・ダルクのオルレアン解放』と『「ロシア」は、いかにして生まれたか—タタールのくびき』が出版されました。漠然とは知っていたものの、深く理解していたわけではないテーマで、どちらも興味深く読みました。

 

後者を読んでいたら、次のような記述がありました。 

北方からヴォルガを下ってきた河川賊「ウシクイニク」により首都サライが襲われ、多くの物資が奪われたのです。


ここで「河川賊「ウシクイニク」」には注が付けられていて、「河川を利用する略奪者集団。(後略)」と説明されています。これまで「海賊」とか「山賊」というのは聞いたことがありましたが、「河川賊」というのは初めて知りました。とは言え、海や山に「賊」がいるなら、河川にも「賊」が居てもおかしくはないし、それが「河川賊」というものなのだろうとは思います。

 

日本では、国土の構造から仕方ないのかもしれませんが、大陸に流れるような大河がありません。そうなると河川専門(?)の「河川賊」の出番は無さそうで、結局「山賊」になってしまうような気がします。それにくらべるとロシアのボルガ川などは3,700kmほどもあり、日本の信濃川や利根川は300kmほどしかありませんから、比べものになりません。中国の黄河も5,500kmほどありますし、南米のアマゾン川は約5,600kmもありますから、歴史を遡ると河川賊が存在していたのではないかと思います。

2023-06-04

これじゃ数独にならない

 The Japan Times Weekendを購読しています。クロスワードとか漫画などが集まった頁があるのですが、そこには数独も掲載されています。ところがMay 20-21, 2023号の数独は、全てのマスが最初から埋まっていました。これじゃ数独にならない。