2010/02/27

黄金分割

買いました。

黄金分割―自然と数理と芸術と黄金分割―自然と数理と芸術と
黄金四角形と黄金螺旋に興味があったので、つい買ってしまいました。
フィボナッチ数とも関連があるそうで、ますます興味がわきます。
プログラミングClojure も買わず、初めての人のためのLISP[増補改訂版] を買うかも迷ってるくせに、書店に行くとつい買ってしまいますorz
ちなみに黄金比に興味を持ったのは、SBRを読んだためです。

あと TOKYO STYLE (ちくま文庫) も買いました。
TOKYO STYLE (ちくま文庫)TOKYO STYLE (ちくま文庫)
実はこれも以前から欲しいと思っていたものです。
コンビニとかによく置いてある「部屋がたくさん載ってる本」もついつい買ってしまいます。


追記

そういえば、書店で本を買うときはNayuzonのお世話になってます。便利。

2010/02/24

TSS member?

listの中に指定した要素が入ってるかどうかっていうあれです。
letrec の使われ方が微妙に新鮮だったりする。
使われ方というか位置というか。

The Seasoned Schemer

TSS let/cc, try



 (define-syntax letcc 
(syntax-rules ()
((letcc var . body)
(call-with-current-continuation
(lambda (var) . body)))))
(define-syntax try
(syntax-rules ()
((try var a . b)
(letcc success
(letcc var (success a)) . b))))



TSS scramble

ようわからんとです。


追記

Schemerシリーズ 5つ + α

The Little Schemer, 4th Edition とその続き The Seasoned Schemer は、よく Lisp や Scheme の入門書として紹介されます。

初めての人のためのLISP[増補改訂版] の次あたりに読んでみてはどうでしょうか。

これ↑も読んでみたいのですが、無職でお金がないので購入するか迷ってます。

こういうのって、「読みたい」以前に「全部手元に欲しい・・・」っていう収集欲的なものが働きませんか。

 

Schemer シリーズ

Schemer シリーズと言いつつ、Java と ML を含んでいますが。

The Little Schemer, 4th Edition The Little Schemer, 4th Edition

car, cdr, cons, cond, eq?, null?, 再帰、高階関数、クロージャ、継続渡し、Y combinator, カリー化、Scheme で作る小さなLisp など。

The Seasoned Schemer The Seasoned Schemer

letrec, let/cc, call/cc, 継続(渡し、呼び出し)、set!, if, scheme で作る Lisp など。

The Reasoned Schemer The Reasoned Schemer

sxml の作者の方が scheme で作った miniKANREN という Prolog ライクな論理型言語について話が進むらしい。マクロも。

A Little Java, A Few Patterns (Language, Speech, & Communication) A Little Java, A Few Patterns (Language, Speech, & Communication)

The Little MLer The Little MLer

 

Java のと ML のは持ってないので よく知りませんが、読んでみたいです。

ML といえば Caml , Ocaml, F# ですよね。

 

サンプルとエクササイズ

The Little Schemer, 4th Edition の9章が、The Seasoned Schemer は13章がサンプルとして公開されているようです。

 

PostScript ファイルなので viewer がない方はこちら。

Google Books では The Reasoned Schemer は読めないみたいですね。

 

訳本

The Little Schemer, 4th EditionA Little Java, A Few Patterns (Language, Speech, & Communication) は訳本があるようですね。絶版みたいですけど。

Scheme(スキーム)手習い―直感で学ぶLisp (COMPUTATION & SOFTWARE SCIENCE) Scheme(スキーム)手習い―直感で学ぶLisp (COMPUTATION & SOFTWARE SCIENCE)

Javaとピザとデザインパターン Javaとピザとデザインパターン

 

 

Erlang, JavaScript, Ruby ・・・

探せば他にもありそうですね。

 

その他

The Little Schemer, 4th Edition は元々Little LISPer だったようです。

Little LISPer (3rd Edition) Little LISPer (3rd Edition)

The Little LISPer: Trade Edition The Little LISPer: Trade Edition

Little LISPer Little LISPer

The Little Lisper The Little Lisper

Little Lisper 13-7005 05 Little Lisper 13-7005 05

 

関連

TSS multirember-f letrec, fold

(define hoge (letrec ・・・ってのは見慣れなくて驚いた。
も参考に。



The Little Schemer, 4th EditionThe Seasoned Schemer

続 TSS multirember

なるほど、こう書けるんですね!
読めるし分かるのですが、書けません・・・。
call/ccはわかりませんorz
「再帰結果を束縛」というのは、文字通りの意味でなく、先に底まで再帰して底から戻ってくるときに分岐を行なう、ということで良いんでしょうか。



The Little Schemer, 4th EditionThe Seasoned Schemer

TSS letrec multirember

The Seasoned Schemer
The Little Schemer でおなじみ multirember 。
Y combinator 使って書き直しましょう → Y combinator は letrec が代替に使えるよ、という無茶な流れ。



The Little Schemer, 4th EditionThe Seasoned Schemer

メモ git add comit push

すぐ忘れる。メモしても忘れる。
  1. cd
  2. git add filename
  3. git commit -m 'comment'
  4. git push origin master
  5. password


入門git 入門Git 実用Git

メモ Gauche 元に戻す

なんと言えば良いのかわかりません・・・。「hogeに束縛されているlengthを組み込みのものに戻す」、とか?

とにかく、(define length 'hoge)とかしちゃったのを、元のlengthに戻したい時。

(define length
  (with-module gauche length))

 

 

プログラミングGauche

2010/02/22

「初めての人のためのLISP」

ついに伝説の本が 2010/03/10 に復刊するようですね!すでにamazonで予約できるみたいです。
初めての人のためのLISP[増補改訂版] 初めての人のためのLISP[増補改訂版]
目次がぶっ飛んでますね。面白そう。
1 初めての人のためのLisp
2 CARとCDRで世間を渡れば権兵衛もたじろぐ
3 解釈は評価なり・・・辞書なくして世は渡れず
4 基本関数を修了するや突然関数定義 なんと大それた・・・
5 今度はcond再帰と再起を混同せぬように
6 またも再帰するから再帰なのだ
7 Gogogo・・・dododo・・・looplooploop・・・ やっぱりOは丸い
8 Lispの御本尊のお出まし
9 デートの前にリストの切り貼り
10 変態プログラム
11 シンボルを人前に曝す
12 ガールフレンドも買い物も関数引数でOK
13 Lispの解剖 その1
14 入出力がなければプログラムは生きていけぬ
15 Lispの解剖 とんでその2
16 大団円 対話性に関する対話
17 付録 Lispのまとめ
(目次:株式会社サイエンス社 株式会社新世社 株式会社数理工学社
 

参考


著者である竹内郁雄先生のインタビュー等もとてもおもしろいです。


初めての人のためのLISP[増補改訂版]

9LISP - 010 をやってきました

9LISP

Lispの勉強会を名乗っていますが、Common Lisp ではなく Scheme の学習を進めています。Common Lisp はその後の予定。

隔週の土曜日、午前10時から行なっています。毎回、勉強 → ランチ → 雑談 という流れです。

 

今回の参加者は4人と少な目でした。しかし、今回は遠隔地からskypeで@cametan_001さんに参加頂き、いつもと違った面白さがありました。

あと Google wave すげー!リアルタイムコード共有的な意味で。

 

今回の内容

前回は「Schemeで高階関数を書いてみよう」ということで、リストから要素を取り除くrember手続きを書き、段階を追ってsrfi-1のfilter相当の高階関数rember-fに書き換えていく、というようなことをやりました。リストに要素を加えるinsertR, insertL, insert-g(高階関数)も。

rember は The Little Schemer に出てくるもので、Remove Member ということで良いかと思います。insertR, L, -g も同じく The Little Schemer に出てきます。

 

今回は、

  1. map, for-each, fold を自前で定義してみよう
  2. unfoldっていつ活躍するんだろう・・・。そもそもunfoldって何がunなfoldなの?
  3. fold-rightってreverseとか使わずにスマートに定義できるの?

というようなことがありました。

1はともかく、2は放置、3はループしかないかな?ということでした。

 

ところでsrfiって「サーフィ」って読むんですね。まんまと「えすあーるえふあい」って読んでました。

 

オンライン中継

010からustreamとskypeでオンライン中継を行なうことにしました。

skypeの方、当初「9lisp」とATNDに書いてました。正しくは「qlisp」です。9lispで探された方、申し訳ありませんでしたorz

 

マイクが私の端末にしかなく、中継は終始グダグダになってしまいました。別途マイクを用意しようと思います。(次回準備できるかわかりませんが・・・)

グダグダな中継に付き合って下さった方々、ありがとうございました。

また次回からも行ないますので、気が向いたらのぞいてみてください。

 

The Little SchemerThe Seasoned SchemerThe Reasoned Schemerv

本をたくさん頂きました!

@finalfusion さんに本を頂きました。
ありがとうございます!


頂いたのは以下の本です。

 

アドレナリンジャンキー プロジェクトの現在と未来を映す86パターンアドレナリンジャンキー プロジェクトの現在と未来を映す86パターン

入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算 入門Common Lisp―関数型4つの特徴とλ(ラムダ)計算

関数プログラミング言語「F#」 (I・O BOOKS) 関数プログラミング言語「F#」 (I・O BOOKS)

ゲームプログラマになる前に覚えておきたい技術 ゲームプログラマになる前に覚えておきたい技術

 

実は先月10日が誕生日だったのですが、その時も↓の2冊を頂ました!
ありがとうございます!

 

Let Over Lambda Let Over Lambda

全体最適の問題解決入門―「木を見て森も見る」思考プロセスを身につけよう! 全体最適の問題解決入門―「木を見て森も見る」思考プロセスを身につけよう!

 

 

先日は熊本県立図書館から7冊頂きました。

ニートになった私は以前ほど気軽に本が買えなくなったので、ものすごくありがたいです。
しつこいようですが、@finalfusion さんありがとうございました!

2010/02/18

collatz unfold

プログラミングGauche

unfold

(use srfi-1)
(define (collatz n)
  (unfold (lambda (s)
            (= s 1))
          (lambda (s)
            s)
          (lambda (s)
            (cond ((even? s)(/ s 2))
                  ((odd? s)(+ (* s 3) 1))
                  (else s)))
          n
          (lambda (s)
            (cons s '()))))
(collatz 10)
; -> (10 5 16 8 4 2 1)







途中経過に対してもcollatz





(use srfi-1)
(define (collatz n)
  (let ((stop (lambda (s)
                (= s 1)))
        (term (lambda (s)
                (cond ((even? s)(/ s 2))
                      ((odd? s)(+ (* s 3) 1))
                      (else s)))))
    (unfold stop
            (lambda (s)
              (let ((v (term s)))
                (if (stop v)
                    s
                    (cons s (collatz v)))))
            term
            n
            (lambda (s)
              (cons s '())))))
(collatz 3)
; -> ((3 (10 (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (10 (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1)
;; ((3
;; (10
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (10
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)







普通の再帰など





(define (collatz n)
  (cond ((= n 1) n)
        ((even? n)(collatz (/ n 2)))
        ((odd? n)(collatz (+ (* n 3) 1)))
        (else n)))
(collatz 10)
; -> 1
(define (collatz n col)
  (cond ((= n 1)(cons n col))
        ((even? n)(collatz (/ n 2)(cons n col)))
        ((odd? n)(collatz (+ (* n 3) 1)(cons n col)))
        (else col)))
(collatz 10 '())
; -> (1 2 4 8 16 5 10)
;; (unfold p f g seed tail-gen)
;; (if (p seed)
;; (tail-gen seed)
;; (cons (f seed)
;; (unfold p f g (g seed))))
(use srfi-1)
(define (collatz n)
  (unfold (lambda (s)
            (= s 1))
          (lambda (s)
            s)
          (lambda (s)
            (cond ((even? s)(/ s 2))
                  ((odd? s)(+ (* s 3) 1))
                  (else s)))
          n
          (lambda (s)
            (cons s '()))))
(collatz 10)
; -> (10 5 16 8 4 2 1)
(use srfi-1)
(define (collatz n)
  (let ((stop (lambda (s)
                (= s 1)))
        (term (lambda (s)
                (cond ((even? s)(/ s 2))
                      ((odd? s)(+ (* s 3) 1))
                      (else s)))))
    (unfold stop
            (lambda (s)
              (let ((v (term s)))
                (if (stop v)
                    s
                    (cons s (collatz v)))))
            term
            n
            (lambda (s)
              (cons s '())))))
(collatz 3)
; -> ((3 (10 (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (10 (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (5 (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1) (16 (8 (4 2 1) 2 1) (4 2 1) 2 1) (8 (4 2 1) 2 1) (4 2 1) 2 1)
;; ((3
;; (10
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (10
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (5
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (16
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
;; (8
;; (4 2 1) 2 1)
;; (4 2 1) 2 1)
(for-each (lambda (e)
            (display e)
            (newline))
          (collatz 3))





The Little Schemer, 4th EditionThe Seasoned Schemer

Gauche 補完

これは便利すぐる。
WS0904
入門 GNU Emacs 第3版リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)入門Meadow/Emacs

test js

JavaScript 第5版
pre
pre class js







test post from wlw (js)

JavaScript 第5版

alert('Hello, JavaScript');




Test Test

test (js)

JavaScript 第5版
alert('Hello, JavaScript');



Test


Test

2010/02/17

S式コメント

プログラミングGauche

; #; srfi-62
(use srfi-1) ; iota
(map (lambda (x)
       #;(newline)(display x)#;(newline) x)
     (iota 10 1))
; -> 12345678910(1 2 3 4 5 6 7 8 9 10)
S式コメント: 「#;」の後ろのS式ひとつが読み捨てられます。SRFI 62で定義されています。

2010/02/16

ラムダ計算 λ...

みんな大好きラムダ計算。ラムだけ遺産。裸無駄ぁ。スlambdaンク!


昨日ついったーで、計算論 計算可能性とラムダ計算の話が出ました。難しいよねーと。
とっつきやすい本や資料はないかなー。

参考

 

 

googleだと大学の授業の資料などが、たくさんヒットしますね。

 

以前amazonのレビューを読んでこの本を購入しました。

計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)

計算論 計算可能性とラムダ計算 (コンピュータサイエンス大学講座)


私個人の感想は「難解・・・」。

 

同じ頃、ここ↓で見かけた論理と計算のしくみという本が気になります。

論理と計算のしくみ

 

関連