2010-01-01から1ヶ月間の記事一覧

Gauche本勉強メモ(6日目)

6.5 簡単なリスト処理 空でないリストの最後の対を見つけるlast-pairを書いてみる。こんな感じだろうか? (define (last-pair2 lis) (if (pair? lis) (last-pair2 (cdr lis)) lis)) gosh> (last-pair2 '(1 2 3)) () gosh> (last-pair2 '(1 . 3)) 3 だめだ。…

Gauche本勉強メモ(5日目)

6.4 foldの定義 foldの定義を書いてみる。 自力で考えてみるか。 … 10分くらいゴニョゴニョやってみたがわからんかった。正解は (define (fold proc init lis) (if (null? lis) init (fold proc (proc (car lis) init) (cdr lis)))) まずlisが空リストの時に…

Gauche本勉強メモ(4日目)

6.3 リストの走査 fold 手続きと初期値、リストを引数にとり、初期値とリストの最初の値を手続きに渡し、その結果とリストの2番目の値を手続きに渡し、、、という処理を行う手続き。 ちょっとわかりにくい。 gosh> (fold + 0 '(1 2 3 4 5)) 15 gosh> (fold *…

Gauche本勉強メモ(3日目)

6.1 リスト データとしてのリストをプログラム中に含めたい場合は'(クォート)をリストの前に付加する。 クォートがない場合はデータではなくプログラム(なので1番目の要素は手続きである必要がある) gosh> '(1 2 3) (1 2 3) リストを連結する手続きappen…

Gauche勉強メモ(2日目)

5.1 スクリプト Gaucheのスクリプトエンジンgoshは引数にファイル名を渡すと、それをSchemeプログラムとして読み込み、中に書かれている式を順に評価する。そして、ファイルの読み込みが終了したあと、その中にmainという手続きの定義があればそれを呼び出す…

Gauche勉強メモ(1日目)

1.3 Scheme Schemeの最も基本的なルール lambda式は、「レキシカルな環境を保持した手続き」(クロージャ)へと評価される 手続き呼び出しは継続を伴った引数つきgotoである 1番目のほうは、"lambda式"という言葉はわかる。"「レキシカルな環境を保持した手…

Gaucheの勉強

去年Gauche本を買って少し読んでいたのだけど、いつのまにか放置になっていたのを再開してみようと思う。 現時点でのGauche(Scheme)を学ぶ目的は Lispのマクロを理解し使いこなせるようになること。 継続をきちんと理解すること。 Gaucheでツールやアプリ…