2009/12/30

SICP 図形言語 黄金四角形

WS0831 WS0827 WS0828 WS0834 WS0830 WS0835 WS0837

書いただけで放置していたSICPの図形言語で遊んでみました。

黄金四角形に現れる正方形の中心を曲線で結ぶ(SBR)」ってのをPostScriptvallog:PostScript)でやろうとしてうまくできず、図形言語ならうまいことできるんじゃないかなーなどと思いつつ・・・そのまま遊んでました。


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

2009/12/23

プログラマが好きそうな読み物100

寝る前に携帯で読めそうな文章のまとめとかあると良いなーなどと思ったもので。
(100個かどうかはわかりません)
他にオススメがあれば教えてください。


















    2009/12/21

    9LISP 2009 まとめ

     

    9LISPKPFメーリングリストミニ勉強会やりませんか?)から始まりました。

    KPF(熊本プログラミングフリークス)はTwitterから始まりました。

     

    KPFを始めたお陰で今年はたくさんの変態プログラマに会うことができました。

    KPFを始めたお陰で熊本でLISP勉強会、つまり9LISPを始めることができました。

    言ってみるもんですね。

     

    9LISPは朝10:00から勉強会を行っています。

    開催スパンは原則的に隔週で、土曜日に行っています。

    勉強会後には希望者でランチしてます。たまに09:00からモーニングコーヒーミーティングしたりもします。

     

    ブログに感想や進捗を書いてなかったので、少し書き残しておきます。

    こうやって見ると毎回初参加者の方がいるのがおもしろい。

     

    001

    参加者:6人

    キックオフミーティング

    9LISP発足後2ヶ月を経過し初めての会。

    急な開催(前日アナウンスだったような?)にも関わらず6人も集まり驚く。

    ここは熊本ですよ?

    LISP勉強会ではあるが、Common LispではなくSchemeの学習から入ることに決定。

     

    002

    参加者:6人

    初参加者:1人

    ランチ:5人

    毎回宿題を出すことにする。

    課題について事前に質疑応答できるようにする方が良いのではないか。

    会の間にもっとコードを書けるように事前に準備が必要ではないか。

     

    003

    参加者:6人

    初参加者:1人

    ランチ:5人

    宿題をやってきた人は少なめ。

    宿題については事前にWeb上にアップしておく方が良いのではないか。

    なにかテキストに沿って進めていってはどうか。

    SchemeらしさLispらしさ、そういうものがもっと良くわかる勉強会が良い。

     

    004

    参加者:6人

    初参加者:1人

    ランチ:4人

    テキスト:The Little Schemerを使って進め始める。

    読書会、輪読会等に参加したことのある人がおらず、体当たりで進めることにする。

    テキストは問答形式となっており、一問一答。

    洋書なので、参加者一人につき一つのQ&Aを読み、訳す形で進めることにする。

    疑問や不明な点があればホワイトボードなどを用いて議論。

    S式を二分木や「箱とポインタ記法」などの図に描いてみたりする。

    経験者の脳内イメージを描きだしてみる。

    テキストはP.8までを終える。

    今後の課題はやはりWeb上でのコード共有と、会の間にもっとコードを書きたい。

    ランチではSQLや集合論、JavaScriptエンジン、アセンブラ、組み込み、制御系などについて大いに盛り上がる。

     

    005

    参加者:5人

    初参加者:1人

    ランチ:4人

    前回に引き続き、テキスト:The Little Schemerを進める。

    P.8 ~

    復習と初参加者を考慮し、前回進んだ部分を復習。

    今後も会の始めに復習を行うことにする。

    復習の仕方は検討が必要。

    Scheme/Lisp未経験者だった参加者からは、なかなか頭が切り替わらないとの声も。

    テキストの和訳はないのか?→絶版(Scheme手習い)

    9LISPの読み方は?当初「キューリスプ」だったが、あえて決めない方向に変更。

    キューリスプ、クリスプ、クリスピー、ナインリスプ。

    読みたいように読んでください。

     

    006

    参加者:7名

    初参加者:1名

    ランチ:7名

    9LISP - 006

     

    今後の予定

     

     

     

    The Little Schemer, 4th Edition

    The Little Schemer, 4th Edition

    posted with amazlet at 09.12.21

    Daniel P. Friedman Matthias Felleisen
    The MIT Press
    売り上げランキング: 22002

    おすすめ度の平均: 5.0

    5 小さなScheme処理系で学ぶ数学基礎理論
    5 Schemeが好きになります
    5 英語であるのが苦痛にならない楽しさ
    5 面白いスタイル

    Amazon.co.jp で詳細を見る

    9LISP - 006

     

    参加者

    7名(初参加者1名)

    ランチ7名

     

    進捗

    テキスト:The Little Schemer

    Chapter 2 ~
    P.15 ~ P.21 「or」の手前(lat?)まで

    lat?手続き(list of atoms の略かな?)を定義し、1行づつ動作を追って説明されているところまでを終える。

     

    課題/目標

    • テキストは章以外の区切りがはっきりしていないので、事前に区切りを決めて時間的な目標を設けて読み進めるようにしたい。
    • オンライン参加についての検討。しばらくは宿題をMy Snippetに投稿する形でどうか。ust、skypeも検討。

     

    今後の予定

     

    参考URL

     

     

    The Little Schemer, 4th Edition
    The Little Schemer, 4th Edition
    posted with amazlet at 09.12.21
    Daniel P. Friedman Matthias Felleisen
    The MIT Press
    売り上げランキング: 22002
    おすすめ度の平均: 5.0
    5 小さなScheme処理系で学ぶ数学基礎理論
    5 Schemeが好きになります
    5 英語であるのが苦痛にならない楽しさ
    5 面白いスタイル

    2009/12/02

    PostScript 書籍 PDF 追加

     

    PostScript(R) Language Program Design (APL)
    Adobe Systems Inc.
    Addison-Wesley Professional
    売り上げランキング: 59322

     

    BlueBook, Thinking in PostScript 他はこちら

    scheme filter

    にコメントが付いてました!

    このfilterだと入れ子のリストは処理できないですね
    たとえば
    (1 2 (3 4) 5 (6 7))

    ホンマや・・・。

    ということで寝る前に

    (define filter
      (lambda (pred l)
        (cond
         ((null? l) l)
         ((list? (car l))(filter pred (car l)))
         ((pred (car l))(cons (car l)
                             (filter pred (cdr l))))
         (else (filter pred (cdr l))))))

    (filter even? '(1 2 3 4 5))
    ; -> (2 4)
    (filter even? '(1 2 3 4 5 (6 7 8 9 (10 11 12 13)(14 15 16 (17 18 (19 20))))))
    ; -> (2 4 6 8 10 12)

    結果は、リストのネストもそのままにすべきか?ということで・・・

    (define filter
      (lambda (pred l)
        (cond
         ((null? l) l)
         ((list? (car l))(cons (filter pred (car l))
                               (filter pred (cdr l))))
         ((pred (car l))(cons (car l)
                             (filter pred (cdr l))))
         (else (filter pred (cdr l))))))

    (filter even? '(1 2 3 4 5))
    ; -> (2 4)
    (filter even? '(1 2 3 4 5 (6 7 8 9 (10 11 12 13)(14 15 16 (17 18 (19 20))))))
    ; -> (2 4 (6 8 (10 12) (14 16 (18 (20)))))
    (filter even? '((((1 2 3) 4 5 6 (7 (8 9 10 (((11 12 13)) 14) 15)))) 16 17))
    ; -> ((((2) 4 6 ((8 10 (((12)) 14))))) 16)
    (filter odd? '((((1 2 3) 4 5 6 (7 (8 9 10 (((11 12 13)) 14) 15)))) 16 17))
    ; -> ((((1 3) 5 (7 (9 (((11 13))) 15)))) 17)

     

    どっちだろ。srfiだと・・・

    (use srfi-1)
    (filter even? '(1 2 3 4 5))
    ; -> (2 4)
    (filter even? '(1 2 3 4 5 (6 7 8 9 (10 11 12 13)(14 15 16 (17 18 (19 20))))))
    ; -> *** ERROR: integer required, but got (6 7 8 9 (10 11 12 13) (14 15 16 (17 18 (19 20))))
    (filter even? '((((1 2 3) 4 5 6 (7 (8 9 10 (((11 12 13)) 14) 15)))) 16 17))
    ; -> *** ERROR: integer required, but got (((1 2 3) 4 5 6 (7 (8 9 10 (((11 12 13)) 14) 15))))

     

    今までまったくコメントチェックしてませんでした。今度から気をつけます。(サイドバーに"最近のコメント"を追加して、メールでも知らせてくれるようにした)

     

    なんか久しぶりにScheme書いた気がした。