Thu, 20 Sep 2007

Scheme超初級クックブック

あいかわらず、Scheme勉強中です。

ここんところちょっとしたコードはできるだけSchemeで書くようにしているので、 たまにPythonのコードを見ると[]が妙に角ばって見えてしまう。

新しい言語を使おうとしてる時って、すごく基本的なことでもその言語では どうしたらいいのか結構迷う。知ってる人にとってはあたりまえなんだろうけど。

なので、そんなののいくつかをメモ。

ファイルを読み込んで中身を表示

(call-with-input-file "filename"
    (lambda (in)
        (print (port->string in))))


Continue Reading...: "Scheme超初級クックブック"



Fri, 24 Aug 2007

vimでschemeとか、設定追加とか

自分の所では、下記のようにした所いい感じに。

filetype indent on
autocmd FileType scheme set nosmartindent nocindent lispwords=define

これまでscheme modeだとなんだかちゃんとインデントしてくれなくて もうひとつ書いてて楽しくないなーと思ってたんだけど、これでやっと 楽しくなりそうです。


あと、schemeとは全然関係ないけど、下記の設定を追加してみた。

inoremap <C-a> <Home>
inoremap <C-e> <End>
inoremap <C-f> <Right>
inoremap <C-b> <Left>
inoremap <C-d> <Del>

" コマンドモードの設定
cmap <C-a> <Home>
cmap <C-e> <End>
cmap <C-f> <Right>
cmap <C-b> <Left>
cmap <C-d> <Del>

" インサートモードでも上下に移動したい
inoremap <M-j> <Down>
inoremap <M-k> <Up>
inoremap <Leader>h <ESC>h
inoremap <Leader>l <ESC>l
inoremap <Leader>j <ESC>j
inoremap <Leader>k <ESC>k

inoremap <Leader>w <ESC>:w<CR>
nnoremap <Leader>w :w<CR>

Wed, 25 Jul 2007

The Little Schemer

SICPの例題を解くにあたり、やっぱりSchemeが良くわかってないので どうにも気持悪くて、まずはSchemeの勉強をしよう!と「The Little Schemer」 を買ってみました。

The Little Schemer

ASIN: 0262560992


英語の本なんだけど、一問一答形式なのでそれほど長文を読む必要はなく あまり英語が苦にならずに読み進めることができます。

内容はこんな感じ:

What is the car of l
where
  l is (((hotdogs)) (and) (pickle) relish)



((hotdogs)),
read as:
  "The list of the list of hotdogs."
  ((hotdogs)) is the first S-expresssion of l.

関数定義が出てきたら一行一行丁寧に説明してくれる。

ただ再帰が出てきたときには再帰の部分を一行一行再帰が終わるまで繰り返し 説明してくれるので、すでに再帰についてわかった(少くともわかった気に なった)後はちょっとくどいような気がする。まぁ読み飛ばしたらいいだけ なので特に問題じゃないけど。

なかなか読み易いし、一問一問が短かいので電車の中のちょっとした時間にも できるのが良いです。


Schemeの練習: スクリプトでの引数の扱い

引数として数値を3つ取る関数について考える。:

(define hoge
    (lambda (x y z)
        ......))

下記のように:

$ gosh hoge.scm 1 2 3

スクリプトに引数を渡す場合、main関数の引数には文字列のリストとして渡される。:

(define main
    (lambda (argv)
        (when (string? (car (cdr argv))) (print "string"))
        (print argv)))

$ gosh hoge.scm 1 2 3
string
(hoge.scm 1 2 3)

となる。ちなみにリストの先頭にはスクリプト名が入る。

で、文字列を数値にするには、 string->number を使ったらいいにしても リストの要素一つ一つに対して、:

(hoge (string->number (list-ref argv 1))
      (string->number (list-ref argv 2))
      (string->number (list-ref argv 3)))

のようにして関数の引数に渡すのも格好悪いなーと思って:

(apply hoge (map string->number (cdr argv)))

のようにしてみました。

一応これなら格好いいかなーと思うものの、関数の引数を3つの数値じゃなくて リストのまま渡して関数内部で処理する方が一般的だとか、普通こういう場合は Scheme(Gauche)ではこう書くよ、みたいなイディオムがあるのかな?


Fri, 01 Jun 2007

SICP買っちゃいました

しばらく前はerlangを勉強していたのですが、なんか瞬間風速的に流行ってしまったので ちょっとやる気をそがれてしまい、一旦保留にすることにしました。 文法的には変ってるものの、意外と気にいってるのと、流行ったことによって色んな人 がコード書いたり、考察してくれたので今後再開する時には役に立つのかな、とは思います。


で、「計算機プログラムの構造と解釈」。前から気になってはいたのですが、久しぶりに

のページを見てみたら読み終わってたんだね。すごいなー半年間も継続できるって。 継続できるって、一種の才能だよね。

ということで、なんだか無性に読みたくなったので、amazonでポチッと購入してみました。

計算機プログラムの構造と解釈

ASIN: 489471163X



本日、amazonから届きました。

まずは、11ページの問題1.3まで読んで問題やりました。 amazonレビューでは、やたら翻訳が悪い悪いって書かれてるけど、別に気にならないけどなー? 多少直訳的なところや若干は意味のよくわからない所もあるものの、日本語として読める というだけで十分ありがたいと思います。


問題の回答は下記を参考にさせて頂きます。

なんとか最後まで読み通してみたいと思っています。