2009/03/31

[Gauche]blog-index

プログラミングGauche

読んだログ。こちらも積読中・・・orz

 

 

プログラミングGauche
プログラミングGauche
posted with amazlet at 09.03.17
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 41303
おすすめ度の平均: 5.0
5 日本が米国に先行している稀な事例

[The Little Schemer]blog-index

The Little Schemer

読んだログ的なもの。

  • まとめ
  • 写経
  • 練習問題
  • わからないところ
  • 調べた訳

など

 

 

 

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

 

The Seasoned Schemer
The Seasoned Schemer
posted with amazlet at 09.03.30
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 18883
おすすめ度の平均: 5.0
5 Little Schemer とセットで

[SICP]blog-index

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

読んだログ。かなり早い段階で積読中だけど・・・orz

 

 

 

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 123513
おすすめ度の平均: 3.0
1 訳が酷い
4 紙と鉛筆と計算機と
1 内容最高。翻訳最低。
5 食わず嫌いでした。
5 プログラマにとって必読の本です

[The Little Schemer]member?

The Little Schemer」P.22 ~

 

  • The First Commandment
    • (preliminary)
    • Always ask null? as the first question in expressing any function.
    • 関数を評価する際は、null?手続きが常に初めの問いとなるでしょう。

 

(member? 'tea '(coffee tea or milk))
;; => #t
  • because, one of the atoms of the '(coffee tea or milk), is the same as the atom tea.
  • なぜなら、'(coffee tea or milk)のatomの一つと、atomであるteaは同じであるから。

 

(member? 'poached '(fried eggs and scrambled eggs))
;; => #f

 

自前

(define member?
  (lambda (a lat)
    (cond ((null? lat) #f)
               ((eq? (car lat) a) #t)
               (else (member? a (cdr lat))))))

 

member?
;; =>  #<closure member?>

 

(member? 'tea '(coffee tea or milk))
;; => #t

 

(member? 't '(coffee tea or milk))
;; => #f

 

(member? 'meat '(mashed potatoses and meat gravy))
;; => #t

 

回答

(define member?
  (lambda (a lat)
    (cond
     ((null? lat) #f)
     (else (or (eq? (car lat) a)
               (member? a (cdr lat)))))))

 

(member? 'tea '(coffee tea or milk))
;; => #t

 

(member? 'coke '(cofee tea or milk))
;; => #f

 

(member? 'meat '(mashed potatoses and meat gravy))
;; => #t

 

 

  • cond
    • else
      • Is else really a question?
      • Yes, else is a question whoose value is always true.

 

 

  • Do It, Do It Again, and Again, and Again ...

[The Little Schemer]or

The Little Schemer」P.21 ~

 

(or (null? '()) (atom? '(d e f g)))
;; => #t

 

(or (null? '(a b c)) (null? '()))
;; => #t

 

  • or likes SQL's Coalesce.

 

(or (null? '(a b c)) (null? '(atom)))
;; => #f

 

  • (or ...
    • asks two quesstions, one at a time. If the first one is true it stops and answers true. Otherwise it asks the second question and answers with whatever the second question answers.
    • 一度に二つの質問をしたとする。もし最初の一つがtrueであれば質問をやめ、trueを返す。そうでなければ、二つ目の質問をし、二つ目の質問の解を返す。

[The Little Schemer]lat?

The Little Schemer」P.15 ~

 

  • lat
    • a lat is is a list of atoms
    • null list is lat
    • Every lat is a list of atoms!

 

自前のlat?

(define lat?
  (lambda (ls)
    (cond ((null? ls) #t)
          ((atom? (car ls))
           (lat? (cdr ls)))
          (else #f))))

 

(lat? '(1 2 3))
;; => #t

 

(lat? '(a b c))
;; => #t

 

(lat? '())
;; => #t

 

(lat? '((1 2 3) 4 5))
;; => #f

 

回答

(define lat?
  (lambda (l)
    (cond ((null? l) #t)
          ((atom? (car l)) (lat? (cdr l)))
          (else #f))))

  • 違い
    • インデントが異なった
    • 引数名が異なった

 

 

  • (cond ...
    • asks questions
  • (lambda ...
    • creates a function
  • (define ...
    • gives it a name

 

 

書籍では以降、再帰の説明がS式及び行単位で続く・・・。

結構くどい。

省略。

[The Little Schemer]eq?

The Little Schemer」P.11 ~

 

  • The Law of Eq?
    • The primitiive eq? takes tow arguments. Each must be a non-numeric atom.
    • 組み込み手続きeq?は二つの引数を取る。それぞれが数値以外のatomでなければならない。

 

(eq? margarine butter)
;; => #f

 

(eq? '() (strawberry))
;; => #f
  • No answer
    • ()と(strawberry)はlistであるから
  • Gaucheでは・・・・
    • #f

 

  • In practice, lists may be arguments of eq? Two lists are eq? if they are the same lists.
  • In practice, some numbers may be arguments of eq?

(eq? 'Harry 'Harry)
;; => #t

 

(eq? '(1 2 3) '())
;; => #f

 

(eq? 1 3)
;; => #f

 

(eq? 1 1)
;; => #t

 

(eq? '(1 2 3) '(1 2 3))
;; => #f

 

(eq? '() '())
;; => #t

 

(eq? 1 1)
;; => #t

(eq? '(1 2 3) '(1 2 3))
;; => #f

(eq? '() '())
;; => #t

  • ??? ↓
    • The Law of Eq?
      • The primitiive eq? takes tow arguments. Each must be a non-numeric atom.
      • 組み込み手続きeq?は二つの引数を取る。それぞれが数値以外のatomでなければならない。

[The Little Schemer]atom?

The Little Schemer」P.10 ~

 

(atom? 'Harry)
;; => #t

 

atom?手続き

(define atom?
  (lambda (x)
    (and (not (pair? x)) (not (null? x)))))

  • 対でもなく
  • null listでもない

 

(atom? 'Harry)

;; => #t


(atom? '(1 2 3))

;; => #f


(atom? '())

;; => #f

 

(atom? '(Harry had a heap of apples))
;; => #f
  • listだから

 

  • atom?手続きはいくつの引数を取りますか?
    • 一つのS式

 

(atom? (car '(Harry  had a heap of apples)))
;; => #t
  • (car '(Harry  had a heap of apples))
    • Harry
  • (atom? 'Harry)
    • #t

[The Little Schemer]null?

The Little Schemer」P.7 ~

 

  • The Law of Null?
    • The primitive null? is defined only for lists.
    • 組み込み手続きnull?はlistに対してのみ有効

 

これはnull listか?

()
  • Yes
    • なぜなら0個のS式が格納されたS式であるため

 

これはnull listか?

(null? list)
;; => #t or #f
(null? '())
;; => #t

 

(quote ())
;; => ()
  • (quote ()) は null list 表記
  • '()に同じ

 

(null? '(a b c))
;; => #f
  • false
    • #f

 

(null? 'supaghetti)
;; => #f
  • The Little Schemerでは・・・
    • No answer
      • atomに対してnull?手続きは適用できません
    • In practice, (null? a) is false for everything, except the empty list.
  • Gaucheでは・・・
    • 上記の通り#f ⇒ false

[The Little Schemer]cons

The Little Schemer」P.7 ~

 

  • The Law of Cons
    • The primitive cons takes two arguments.The second argument to cons must be a list.the result is a list.
    • 組み込み手続きconsは2つの引数を取る。第二引数は必ずlistでなければならない。結果もlistとなる。

 

(cons 'peanut '(butter and jelly))
;; => (peanut butter and jelly)
  • cons手続きはlistの先頭にatomを追加する
  • 読み
    • cons the atom peanut onto the list (butter and jelly)

 

(cons '(banana and) '(peanut butter and jelly))
;; => ((banana and) peanut butter and jelly)
  • cons手続きはlistの先頭にS式を追加する

 

(cons '((help) this) '(is very ((hard) to learn)))
;; => (((help) this) is very ((hard) to learn))
  • cons手続きは2つの手続きを取る
    • 第一引数にはなんらかのS式
    • 第二引数にはなんらかのlist

 

(cons '(a b (c)) '())
;; => ((a b (c)))
  • ()はlistであるから

 

(cons a '())
;; => (a)

 

(cons '((a b c)) 'b)
;; => (((a b c)) . b)
  • The Little Schemerでは・・・
    • No Answer, since the second argument l must be a list.
    • 回答なし、第二引数は必ずlistでなければならない
      • Gaucheでは(つい)が返る
        • (((a b c)) . b)

 

  • In practice
    • (cons a b) works for all values a and b
    • (car (cons a b)) = a
    • (cdr (cons a b)) = b

では、No Answerとはどういうこと?

 

(cons 'a 'b)
  • No Answer, Why?
    • 取り合えず回答
      • Because the second argument must be a list.
      • 第二引数はlistでなければならないため
        • でも・・・対は?

 

(cons 'a (car'((b) c d)))
;; => (a b)
  • Why?
    • (car '((b) c d))
      • (b)
    • (cons 'a '(b))
      • (a b)

 

(cons 'a '((b) c d))
;; => (a c d)
    • Why?
      • (cdr '((b) c d))
        • (c d)
      • (cons 'a '(c d))
        • (a c d)

[The Little Schemer]cdr

The Little Schemer」P.6 ~

 

  • The Law of Cdr
    • The primitive cdr is defined only for non-empty lists. The cdr of any non-empty list is always another list.
    • 組み込み手続きcdrは空でないlistに対してのみ有効。空でないlistのcdrは常に別のlistとなる。
    • 読み
      • could-er
      • クダー(クッダー?)

 

(cdr '(a b c))
;; => (b c)
  • (cdr '(a b c))
    • (b c)
    • (b c)は(car '(a b c))を除いたlist

 

(cdr '((a b c) x y z))
;; =>  (x y z)
(cdr '(hamburger))
;; => ()
(cdr '((x) t r))
;; => (t r)
(cdr 'hotdogs)
;; => error
(cdr '())
;; => error
  • cdr
    • atomに対して適用することはできない
    • null list (empty list)に対して適用することはできない

 

(car (cdr '((b) (x y) ((c)))))
;; => (((c)))
  1. (cdr '((b) (x y) ((c))))
    • ((x y) ((c)))
  2. (car '((x y) ((c))))
    • (((c)))
(cdr (car '(a (b (c)) d)))
;; => error
  1. (car '(a (b (c)) d))
    • a
  2. (cdr a)
    • error

 

 

  • car、cdr
    • atomには適用できない
    • null list(empty list)以外のlistを引数に取る

[The Little Schemer]car

The Little Schemer」P.5 ~

 

  • The Law of Car
    • The primitive car is defined only for non-empty lists.
    • 組み込み手続きcarは空でないlistに対してのみ有効
    • car
      • カー

 

(car '(a b c))
;; => a
(car '((a b c) x y z))
;; => (a b c)
(car 'hotdog)
;; => error
(car '())
;; => error

 

(car '(((hotdogs)) (and) (pickle) relish))
;; => ((hotdogs))
  • 読み ((hotdogs))
    • "The list of the list of hotdogs"
  • (car l)
    • list「l」の最初のS式は何?

 

(car (car '(((hotdogs)) (and))))
;; => (hotdogs)

[The Little Schemer]S-expression

The Little Schemer」P.4 ~

 

これらはS式(S-expression)ですよーと。

xyz
(x y z)
((x y) z)
  • すべてのatomはS式
  • listはS式
  • すべてのlistはS式

 

list

(how are you doing so far)

 

このlistにはいくつのS式が入っているか。

(how are you doing so far)
  • 6つ
    • how,
    • are
    • you
    • doing
    • so
    • far

 

list

(((how) are) ((you) (doing so)) far)

このlistにはいくつのS式が入っているか。

  • 3つ
    • ((how) are)
    • ((you) (doing so))
    • far

 

これはlistか?

()
  • listでFA
    • 読み
      • null list
      • empty list

 

これはatomか?

()
  • atomではない
    • ()はatomではなくlist

 

これはlistか?

(() () () ())
  • list
    • S式のコレクションはlist

[The Little Schemer]list

The Little Schemer」P.3 ~

 

これらはlistですよーと。

(atom)
(atom turkey or)
((atom turkey) or)

 

括弧で囲まれてないとlistじゃないですよーと。

(atom turkey) or

 

listも(quote (hoge))または'(hoge)となるですね。

(atom)
;; => error


'(atom)
;; => (atom)

'(atom turkey or)
;; => (atom turkey or)


(quote (atom turkey or))
;; => (atom turkey  or)

'((atom turkey) or)
;; => ((atom turkey) or)

[The Little Schemer]atom

The Little Schemer」P.3 ~

 

これれらはatomですよーと。

atom
turkey
1492
u
*abc$

 

処理系では(quote hoge)または'hogeとなるですね。

atom
;; => error


'atom
;; => atom


(quote atom)
;; => atom

turkey
;; => error


'turkey
;; => turkey


(print 'turkey)
;; => turkey
;; => #<undef>

1492
;; => 1492


'1492
;; => 1492

*abc$
;; => error


'*abc$
;; => *abc$

(quote *abc$)
;; => *abc$

2009/03/30

[The Little Schemer]読みながらメモしていく

 

The Little Schemer」を買ったのでボチボチ読んでますが、どうもこのまま読んでても身につかないなと感じたのでメモを残していくことにした。([The Little Schemer]blog-index

どのみち何度か読み直すことにはなりそうだけれども。今は第3章くらい。

  • まとめ
  • 写経
  • 練習問題
  • わからないところ
  • 調べた訳

などをメモしていく予定。

 

「英語が苦手でも割とスラスラ読める」というように聞いてましたし、今のところ読めてますが、後半をチラ見すると厳しそうな気がするのですが・・・・。

難し目の単語はここにまとめてあるっぽいので参考にしたい。

そうそう、まだ「The Little Schemer」の途中ですが「The Seasoned Schemer」も買いました♪

 

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

 

The Seasoned Schemer
The Seasoned Schemer
posted with amazlet at 09.03.30
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 18883
おすすめ度の平均: 5.0
5 Little Schemer とセットで

[KPF][勉強会]KPF第二回勉強会に行ってきたというかやってきた

 

 

 

2009/03/28はKPF第二回勉強会でした。

参加して下さった皆様ありがとうございました!

最終的な参加人数は14名でした。(前回が9名)

 

 

 

二人のスーパー大学生の発表は、ひいき目なしに必見です。

SilverLightってすげー!これ見たらたぶん使いたくなるよ。

最後のaharisuさんの発表なんかはスゴ過ぎて絶句。なぜって彼はまだプログラミングを始めて2年ちょっと。

私も同じくらいの経験年数ですが、あまりの技術力の差に落ち込みましたorz

私の発表は基本的に自己満乙といった感じで恥ずかしいです・・・。

ただ、言える事はKPF楽しいよKPF

 

 

熊本のプログラマはKPFに来るといいよ><

 

  • KPFにくるとこんなことがあるよ。
    • プログラミングが好きなプログラマと知り合える
    • プログラミングすげー!ってなる
    • 発表の練習ができる(w
    • 技術の話で前説なしに思う存分盛り上がれる
    • 勉強会の雰囲気を味わえる
    • 就職活動になるかも
    • ビジネスの話が舞い込むかも
    • 成果物に突っ込んでもらえる
    • 熊本にもすごいプログラマがいることを痛感できる
    • 懇親会で居酒屋に行ってもLAN環境ができあがる

 

  • わかったこと
    • KPFには甲殻機動隊好きが多いらしい

 

  • 反省点
    • 発表の時間制限を設けたほうがいい
    • 話題が濃すぎる
    • 軽めの話題が欲しい
    • もう少し早めに始めたほうがいい
    • やはり準備が遅め
    • やはり告知や募集が遅い

 

  • 今後の改善案
    • もっと手際よく準備できるようにする
    • アンケートを作る
    • 告知を早く
    • 発表者の募集を早く
    • 短めの発表時間で複数の話題を取り扱うと良いのでは?
      • LTを主軸にする?
    • 軽めの話題を取り扱うと良いのでは?
    • Google Site(KPF)にRSSがないのが良ろしくない
      • ブログ作ったら?
      • サイトじゃなくてブログに移行したら?

 

まだまだ改善が必要な点は多いけど、プログラミングが好きな人はKPFにくると楽しい!ということは保障します!

 

熊本のプログラマはKPFに来るといいよ><

 

2009/03/27

[KPF][勉強会]KPF第二回勉強会の会場準備に行ってきた

送信者 vallog

 

[勉強会][KPF]KPF第二回勉強会を開催します。

 

明日はいよいよ、「KPF第二回勉強会」です。

今回の会場は、東海大学 熊本キャンパスで行います。

KPFに参加してくれている学生さん達に手伝っていただきました。

本当に感謝です。

 

3人の学生のうち、2人が発表もやってくれます。

私も発表とLTやります。

 

準備は

  • 机運び
  • 椅子運び
  • プロジェクター&スクリーン
  • 部屋の片付け
  • 無線LANの設置

などでした。(椅子、無線LANは準備済みだった。ありがとうございます><)

 

ポスターは大学の事務の方(?)が作って下さったようで、↑にあるようにとても大きな(縦1mくらいある)を3枚も><

大学の入り口2箇所に立て看板、会場のある棟の入り口に1箇所貼ってくれるそうです!すごいwありがたいです。

しかし、ポスターの「階」が「回」になっててワロタw

 

あと、今日はいろいろ買いました。

  • 差し棒(↓画像) ⇒ カコイイw
  • 電源タップ×2
  • 名札(首からかけるやつ)×20
  • 油性ペンセット
  • お菓子
  • お茶
  • 紙コップ

KPFの備品っつーことでおk♪

 

送信者 vallog

送信者 vallog

2009/03/26

[soft]画像ファイルのアイコンをその画像そのものに

そういえば、これ便利だよなー。というのを思い出したので。

 

窓の杜

画像ファイルの縮小画像をファイルアイコンとして表示「Xentient Thumbnails」

 

掲題の通り、こんな感じです↓

 

  • アイコン表示

WS0606

  • 並べて表示

WS0605

  • 詳細表示

WS0607

 

とても便利です。

irfanviewの変なアイコンとか見なくてすみます。

設定はコントロールパネルから。

PC買ったときもリカバリしたときも最初から入れてるので重いかどうかはわかりません。

 

窓の杜

画像ファイルの縮小画像をファイルアイコンとして表示「Xentient Thumbnails」

[勉強会]自己紹介テンプレート

こんなんでどうでしょ。

任意の項目に答えていただくということで。

項目
名前 きゃん たまおです。
ハンドル valvallowです。
年齢 今年26歳です。
職業 熊本のソフトウェア開発販売会社でプログラマやってます。
仕事 クラサバ及びWeb(ASP.NET)で業務アプリ開発をしています。
言語は主にC#/SQL/JavaScriptなどです。
得意な言語及び分野 主にC#を使います。
最近はJavaScriptとSchemeを学習中です。
最近はまっていること Schemeの学習と読書です。
今年の目標
今後の目標
Scheme関連の書籍を読破し、Schemerになることです。
長期の目標はSICPの読破です。
スーパープログラマ、スーパーハッカーになることです。


この辺はアンケートかな。

  • 今後この勉強会に期待すること
  • 勉強会でやってみたいこと
  • 勉強会で取り扱ってもらいたい話題
  • どこでこの勉強会を知りましたか
  • どこから来ましたか

追記

(福岡のとある勉強会にて)
事前(開催日より前)に、自己紹介を単一のGoogle Docsに書いてもらい、当日はそのドキュメントをスライドショーするというのがすごくよかった。

2009/03/17

[Scheme][Lisp]Shibuya.lisp テクニカルトーク すげー><

WS0597

Shibuya.lisp

Shibuya.lisp(Google グループ)

 

すごい、すごいラインナップ。

ブクマっとけばいいんだけど、あえてブログにメモ。

 

2009/02/28 Shibuya.lisp テクニカルトーク #2 開催!!

 

YouTube:

開会のことば:

Shibuya.lispテクニカルトーク#2 開会の挨拶

 

テクニカル・トーク:


higepon 氏:
Toy to practical interpreter Mosh internals [1/5]
Toy to practical interpreter Mosh internals [2/5]
Toy to practical interpreter Mosh internals [3/5]
Toy to practical interpreter Mosh internals [4/5]
Toy to practical interpreter Mosh internals [5/5]


藤田善勝 氏:
R6RS Schemeの実装、syntax-caseなどについて [1/5]
R6RS Schemeの実装、syntax-caseなどについて [2/5]
R6RS Schemeの実装、syntax-caseなどについて [3/5]
R6RS Schemeの実装、syntax-caseなどについて [4/5]
R6RS Schemeの実装、syntax-caseなどについて [5/5]


和田英一 氏:
私がLispでプログラムを書く理由 [1/7]
私がLispでプログラムを書く理由 [2/7]
私がLispでプログラムを書く理由 [3/7]
私がLispでプログラムを書く理由 [4/7]
私がLispでプログラムを書く理由 [5/7]
私がLispでプログラムを書く理由 [6/7]
私がLispでプログラムを書く理由 [7/7]

 

ライトニング・トーク:


okuoku氏:
SchemeでBluetoothスタックを書く


源馬 照明 氏:
この木 なんの木 木になるS式 〜FUSEでS式ファイルシステム〜

 

山下 伸夫 氏:
Lisperは怠け者の夢は見ないの?


林 拓人/takuto_h 氏:
Cyanの現状と、これから


John Fremlin 氏:
cl-irregsexp — the fastest regular expression library on the planet


吉田 裕美 氏:
流行るLisp用Webフレームワーク(Gauche on Railsから学んだ事)

 

yhara 氏:
よりよいLispプログラムを目指して(冬)

 

Google アラートに引っかかってて気づいた。

しかし、すげーなー、いーなー。

 

 

 WS0604 WS0602

higepon さんはもちろん「ひげぽん OSとか作っちゃうかMona-」のhigepon さん。

 

 

 WS0599 WS0596 

和田英一 さんとか、「日本最初のハッカー」とかって言われててMITの教授だったこともあり東大名誉教授でSICPを訳した、あの和田英一さん。(Wikipedia:和田英一

 

 

WS0600 WS0601

メンバーのページにShiro(Gauche)さんの名も!

 

 

他にも、いつもブログを参考にさせて頂いてる方々やTwitterでフォローしてる方々が・・・。

 

 

 

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 123513
おすすめ度の平均: 3.0
1 訳が酷い
4 紙と鉛筆と計算機と
1 内容最高。翻訳最低。
5 食わず嫌いでした。
5 プログラマにとって必読の本です
プログラミングGauche
プログラミングGauche
posted with amazlet at 09.03.17
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 41303
おすすめ度の平均: 5.0
5 日本が米国に先行している稀な事例
The Little Schemer
The Little Schemer
posted with amazlet at 09.03.17
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 1675
おすすめ度の平均: 5.0
5 小さなScheme処理系で学ぶ数学基礎理論
5 Schemeが好きになります
5 英語であるのが苦痛にならない楽しさ
5 面白いスタイル
The Seasoned Schemer
The Seasoned Schemer
posted with amazlet at 09.03.17
Daniel P. Friedman Matthias Felleisen
Mit Pr
売り上げランキング: 6728
おすすめ度の平均: 5.0
5 Little Schemer とセットで