The King's Museum

ソフトウェアエンジニアのブログ。

Scheme

Scheme 手習い(10)~ eval と apply ~

第10章:このすべての値は何だ Scheme 手習い第 10 章。 いわゆる eval を実装する。この本では value という関数名になっているけど。 準備 リストを操作するための便利関数を事前に定義しておく。 (define (build a b) (cons a (cons b '()))) (define (fi…

Scheme 手習い(9)~ Y コンビネータ~

第9章:…… もう一度、もう一度、もう一度、……(続き) 第9章の最後は Y コンビネータについて。 リストの要素数を数える length を題材にして Y コンビネータを学ぶ。 length リストの要素数を数えるなんの変哲もない関数 length を定義する。 (define (leng…

Scheme 手習い(8)

第9章:…… もう一度、もう一度、もう一度、…… keep-looking (define (pick to lat) (cond [(= to 0) (car lat)] [else (pick (- to 1) (cdr lat))])) (define (keep-looking a to lat) (cond [(number? to) (keep-looking a (pick to lat) lat)] [else (eq? …

継続とは何か(2)

継続について考える第二弾。 前回の記事では、足し算と掛け算という単純な例を用いて継続について考えた。 www.thekingsmuseum.info 今回は再帰での継続渡しスタイルについて考えて、継続についてさらに理解を深めたい。 累乗を計算する 再帰を用いて 1 から…

継続とは何か(1)

『Scheme 手習い』の第8章に「継続」の概念が出てきた。 ただ、説明が少なくいまいち理解できないので、Web ページを漁ってみる。 Gauche の作者 Shiro さん曰く、 文献を紐解くと、 継続とは「これから行われるであろう計算をパッケージ化したもの」とある…

Scheme 手習い(7)

第8章:究極の lambda rember-f (define (rember-f test? a l) (cond [(null? l) '()] [(test? (car l) a) (cdr l)] [else (cons (car l) (rember-f test? a (cdr l)))])) リストから要素を削除する rember の派生版。 要素の一致を判定する関数を引数で与…

Scheme 手習い(6)

第7章:友達と親類 set? (define (set? lat) (cond [(null? lat) #t] [(member? (car lat) (cdr lat)) #f] [else (set? (cdr lat))])) lat が重複要素を持たない(= セットかどうか)かを調べる関数。 前章までですでに定義した手続き member? を利用する。…

Scheme 手習い(5)

第6章:影法師 numbered? (define (numbered? aexp) (cond [(atom? aexp) #t] [(eq? '+ (car (cdr aexp))) (and (numbered? (car aexp)) (numbered? (car (cdr (cdr aexp)))))] [(eq? '* (car (cdr aexp))) (and (numbered? (car aexp)) (numbered? (car (c…

Scheme 手習い(4)

第5章:*すごい* 星がいっぱいだ 元ネタは『2001 年宇宙の旅』のボーマン船長のセリフらしい。 そういえばそんなセリフもあったな。 rember* (define (rember* a l) (cond [(null? l) '()] [(atom? (car l)) (cond [(eq? a (car l)) (rember* a (cdr l))] […

Scheme 手習い(3)

第4章は数字に関する関数をどうやって再帰的に書くかという話が中心。 第4章:数字宛てゲーム add1/sub1 (define (add1 n) (+ n 1)) (define (sub1 n) (- n 1)) 数に 1 を足す関数と数から 1 をひく関数。 +/- (define (+ n m) (cond [(zero? m) n] [else (…

Scheme 手習い(2)

第3章:偉大なる cons rember (define (rember a lat) (cond [(null? lat) '()] [(eq? (car lat) a) (cdr lat)] [else (cons (car lat) (rember a (cdr lat)))])) rember は remove member の略。 ラット(すべての要素がアトムのリスト)内で一致した最初…

『Scheme 手習い』はじめました。

Gauche 本を進めていたけれど、なんだかあんまり身についてる気がしなかったので『Scheme 手習い』に手を出してみた Scheme手習い作者: Daniel P. Friedman,Matthias Felleisen,元吉文男,横山晶一出版社/メーカー: オーム社発売日: 2010/10/22メディア: 単行…

Scheme の number? と complex?

Scheme にある number? と complex? という手続き。 number? : 引数が数値であるかどうか complex? : 引数が複素数であるかどうか (number? x) => #t かつ (complex? x) => #f の数値ってあるのかな?と思った。 リファレンス(6.3.2 数値に関する述語)を見…

cut 式とプログラミング Gauche 7章

cut 式 関数を部分適用したい時に使えるらしい。 例えば、 二つのパラメータを取る cons。片方のパラメータを 1 に特殊化したい。 そういう場合には、 (cut cons 1 <>) と簡潔に書くことができる。 cut 式は実際には lambda の糖衣構文。 (lambda (x) (cons …

プログラミング Gauche:4章〜6章

プログラミング Gauche の4章〜6章のメモ。ちなみにコードはここ。 4章: Gauche の開発スタイル Read, Evaluate, Print, Loop => REPL リテラル 数値、真偽値、文字、文字列 1, 3.14, 2/3 => 単一トークン 真偽値 #t, #f => #f 以外の値はすべて真 文字 #\a,…

Gauche/Scheme を勉強する(三度目の正直)

過去二回挫折した Gauche/Scheme の勉強を再開したいと思う。 www.thekingsmuseum.info www.thekingsmuseum.info 今までは少しストイックに勉強しようとしすぎて挫折してしまったきらいがあるので、ゆるく進めていこうと思う。 ついでに、Evernote にまとめ…

Gauche 始めました。

Scheme というか、Gauche を勉強し始めた。 プログラミングGauche作者: Kahuaプロジェクト,川合史朗出版社/メーカー: オライリージャパン発売日: 2008/03/14メディア: 大型本購入: 22人 クリック: 713回この商品を含むブログ (272件) を見る ちょっとしたタ…

(c) The King's Museum