スキップしてメイン コンテンツに移動

投稿

4月, 2008の投稿を表示しています

プログラミングGauche 9章P.112 練習問題

二回ループしている点が効率悪いが、テストはパス。 gosh> (define (delete-1 elt lis . options) (let-optionals* options ((cmp-fn equal?)) (define (loop lis) (cond [(null? lis) '()] [(cmp-fn elt (car lis)) (cdr lis)] [else (if (eq? (delete-1 elt (cdr lis)) (cdr lis)) lis (cons (car lis) (loop (cdr lis))))])) (loop lis))) delete-1 gosh> (let ((data (list 1 2 3 4 5))) (test* "non-copy delete-1" data (delete-1 6 data) eq?)) test non-copy delete-1, expects (1 2 3 4 5) ==> ok #

プログラミングGauche 7章と8章

7.5 可変長手続きを返す "続きを返す手続き"は、一部だけ違う手続きを複数記述する必要がある際に便利。 例えば、ある手続きを行う前に、引数の値を表示してから処理を行う手続きを書く際など。 本にある、make-loggerは、一度間違ったが、そらで書けた。 gosh> (define (make-logger func) (lambda args (print "args=" args) (apply func args))) gosh> ((make-logger cons) 1 2) args=(1 2) (1 . 2) 手続きを返す手続きを書けるといのは、Schemeを知る前には、なかった感動。 7.9.1 多値を受け取る let-valuesと、let*-valuesの違いは、 let*-valuesの方は、変数のリスとの長で定義された変数を参照する。 let-valuesは参照せず、その時の環境の値で結果が変わる。 多値を返し、多値を受け取る gosh> (define (hoge) (values 'a 'b)) hoge gosh> (let-values (((c d) (hoge))) (print c) (print d)) a b # 8.2 等価性 Javaの == と、equalsメソッドは、それぞれ、eq?と、equals?にあたる。 gosh> (eq? '(1 2) '(1 2)) #f gosh> (equal? '(1 2) '(1 2)) #t gosh> (define p '(a b)) p gosh> (eq? p p) #t gosh> (equal? p p) #t 8.4 条件判断 練習問題 いくつかの述語を引数にとり、新たな述語を作れ ・引数がもとの述語のどれかを満たせば真を返す any-pred ・引数がもとの述語のすべてを満たせば真を返す every-pred gosh> (define (every-pred a b) (lambda (x) (and

プログラミングGauche 練習問題6章P.56

・リストの長さを計算するlengthを直接(foldを使わずに)定義してみる。 (define (length l) (if (null? l) 0 (+ 1 (length (cdr l))))) length gosh> (length '(a b c)) 3 ・リストの中から、条件を満たす要素だけを抜き出したリストを返すfilterを定義してみる gosh> (define (filter proc l) (if (null? l) l (if (proc (car l)) (cons (car l) (filter proc (cdr l))) (filter proc (cdr l))))) filter gosh> (filter odd? '(1 2 3)) (1 3)

プログラミングGaucheの課題deep-copy-list

deep-copy-listを考える。 copy-listは、 ・空リストでなければ、carと、cdrをcopy-listに渡した結果をconsする ・空リストならそのまま返す (define (copy-list l) (if (null? l) l (cons (car l) (copy-list (cdr l))))) deep-copy-listは、 ・空リストでなければ、carと、cdrをdeep-copy-listに渡した結果をconsするが、carがリストなら、 deep-list-copyに、carを渡す ・空リストならそのまま返す で、実装してみたのが以下 (define (deep-copy-list l) (if (null? l) l (if (pair? (car l)) (cons (deep-copy-list (car l)) (deep-copy-list (cdr l))) (cons (car l) (deep-copy-list (cdr l)))))) gosh> (deep-copy-list '(a b c (1 2 3))) (a b c (1 2 3)) あってると思うんだけど、結果が、copy-listと見え方が同じな場合どうしたら確認できるのだろう?

Bloggerでトラックバック

HALOSCAN(www.haloscan.com)でアカウント取得 HALOSCANにログイン "Installation Instructions"で、"Blogger or Blogspot (New Version / Google Login)"を選び、"Next" 画面で表示される手順どおり、Bloggerにログイン "レイアウト"メニューの"HTMLの編集"を選ぶ "テンプレートをすべて保存"リンクを選び、適当な保管先へxmlファイルを保存 保存したxmlファイルをHALOSCANのファイル選択で選び、アップロード "Download New Template"を選ぶと、変更後のxmlがダウンロードできるので、それをBloggerの先ほどxmlをダウンロードした画面から、今度は逆のxmlをアップロード と、このステップでトラックバックを受け付けられるようになった。 トラックバックを打つには、HALOSCAN、"Members" -> "Manage Trackback" -> "Send a trackback ping"から。

Schemeの継続

以下の記事を読むことで、ぼんやりと分かってきた。 でも具体的にどう使ったらよいかは、はっきりとしない。 http://practical-scheme.net/docs/cont-j.html http://www.jah.ne.jp/~naoyuki/Writings/VScheme3.html

iアプリ"オヘヤスイッチ"

先週からiアプリを作り始める。 その名もオヘヤスイッチ。スイッチが三つ並んでいて、それぞれどこの部屋のスイッチか決まっている。右からスクロールしてくる"居間のスイッチをオン"、"洗面所のスイッチをオフ"等の指令をすばやく押すゲーム。 ・・・作ったもののあまり面白くない。 ある程度のレベルになったらGPLで公開する予定。