carとcdr

car

関数 car はリストの中の最初のS式を返す。

gosh> (car '(a b c))
a
gosh> (car '((a b c) x y z))
(a b c)

アトムや空リストに適用するとエラーになる。

gosh> (car 'atom)
*** ERROR: pair required, but got atom
Stack Trace:
_______________________________________
gosh> (car '())
*** ERROR: pair required, but got ()
Stack Trace:
_______________________________________

Car の掟
関数 car は空でないリストに対してのみ定義される。

cdr

関数 cdr (クダーと読む)はリストの中から最初のS式を取り除いた、残りのリストを返す。

gosh> (cdr '(a b c))
(b c)
gosh> (cdr '((a b c) x y z))
(x y z)
gosh> (cdr '(hamburger))
()

S式がひとつしかないリストの場合には、空リストが返ってくるんだな。

アトムや空リストに適用すると、エラーになる。

gosh> (cdr 'atom)
*** ERROR: pair required, but got atom
Stack Trace:
_______________________________________
gosh> (cdr '())
*** ERROR: pair required, but got ()
Stack Trace:
_______________________________________

Cdr の掟
関数 cdr は空でないリストについてのみ定義される。
空でないリストの cdr は常に別のリストになる。

アトムとリストとS式

Scheme ではすべてはS式だ。基本的なデータも、リストも、関数も全部、S式。
アトムもS式。アトムというのは、Scheme での最小単位のようなものらしい。括弧ではない文字からなる文字列(データとしての文字列とは違うことに注意)や数字の列がアトム。ちょっと確かめてみよう。

gosh> atom
*** ERROR: unbound variable: atom
Stack Trace:
_______________________________________

あれ、エラーになった。そうか、クォートしてやらないといけない。クォートすると文字の列をそのものとして扱ってくれる。

gosh> 'atom
atom
gosh> 12345
12345
gosh> '*abc$
*abc$

リストは、S式を括弧でくくったもの。リスト自体もS式なので、リストのリストも作ることができる。これも当然S式。

gosh> '(x y z)
(x y z)
gosh> '((x y) z)
((x y) z)
gosh> '()
()

最後のは空のリスト。これもS式。

Schemeをはじめようと思う

巳年も終わったから Python も終わり、というわけでは決してないのだけど、新しい年には新しい言語を、ということで以前ちょっとだけ触ったことのある Scheme をはじめようと思う。
Windows で動作する Scheme 処理系はWindows 野郎のための Scheme 処理系 ― 年金ロボットをめざしてでいくつか紹介されているけど、あえて紹介からはずされている Gauche を使うことにする。理由は簡単、以前触った Scheme というのが Gauche だからだ。

まずは Gauche のインストールから。↓このページから Windows用バイナリインストーラをダウンロードした。バージョンは0.9.3.3。
 cf. http://practical-scheme.net/gauche/download-j.html
msi形式のインストーラなので、ダブルクリックして起動すればあとはすんなりとインストールできた。

コマンドプロンプトを起動して、goshと入力するとインタープリタがインタラクティブモードで起動する。

^o^ > gosh
gosh>

ここでいろいろ試してみればいいわけだな。

参考書には有名な「Scheme手習い」を使う。これまたずいぶん前に買ったきりほとんど読んでない本で、奥付には平成22年10月25日第1版第1刷発行とある。
[amazonjs asin=”4274068269″ locale=”JP” title=”Scheme手習い”]

それから、Gauche のオンラインマニュアルのページはここ。
 cf. Gauche ユーザリファレンス

さあ、はじめよう。

NokogiriがダメだったのでHpricotをインストールした

タイトルのとおり。Hpricot はすんなりインストールできた。

^o^ > gem install hpricot
Fetching: hpricot-0.8.6.gem (100%)
Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
Successfully installed hpricot-0.8.6
Parsing documentation for hpricot-0.8.6
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/fast_xs.so, skipping
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/hpricot_scan.so, skipp
ing
Installing ri documentation for hpricot-0.8.6
1 gem installed

でも、もともと Hpricot を使ってたのを Nokogiri に乗り換えたんだよなあ。

一応、簡単なスクリプトを書いてちゃんと動くかどうか試してみよう。

require 'hpricot'

HTML =<<

Hello, world. This is <a href="https://blog.panicblanket.com/">blog.PanicBlanket.com</a>

EOH

doc = Hpricot(HTML)
links = doc.search("a")
puts links[0]["href"]

実行結果:

^o^ > ruby hpricot_test.rb
https://blog.panicblanket.com/

うまくいってるようだ。

Windows7のRubyにNokogiriがインストールできない

年末年始の休みも(気分的に)終わったので、Nokogiri のインストールに挑戦する。前回のエントリは MinGW をインストールしたところで終わったけど、正常にインストールできていないように見えるので不安。
で、結果から先に言ってしまうと、Nokogiri はインストールできなかった。できなかったというエントリを書く必要があるのかどうか悩むところだけど、メモのために記録を残しておく。
基本は、↓このページに沿って作業した。

 cf.WindowsのRuby 2.0でNokogiriを使う ― KaoriYa

と、その前に、gcc と sh のあるディレクトリにパスを通しておく。具体的には、C:\MinGW\bin と C:\MinGW\msys\1.0\bin にパスを通した。
でもって、msys.bat を起動して作業開始。ところが、sh ./configure のときから gcc が次のようなメッセージを出す。

nodisk

仕方がないので「続行」をクリックすると、またすぐに同じメッセージが。これを数十回も繰り返してやっと終わったと思ったら make でもやっぱり同じメッセージが数十回も出た。あー、こりゃうまくいかないな。
結局、libxml2 でも libxslt でも同じ状況で、当然 Nokogiri のインストールもうまくいかずじまい。
Ruby を使うのもだんだんつらくなってくるなあ。