: Gauche&SICP読書会に参加してきた

Scheme初心者が戸惑いながらもSchemeの面白さの一端に触れることができました.主催者のyukkyさん,emaさんありがとうございました.
午前はプログラミングGauche読書会, 午後からSICP読書会というとってもScheme漬けな一日でした.

プログラミングGauche読書会

プログラミングGauche

プログラミングGauche


プログラミングGaucheの6.2章まで読み進めました.O'RELLYにしてはとっても斬新な構成ではないかと思う.導入部が短く,かつ各章ごとが短く区切られている.読者に読み進めるためのモチベーションが維持されやすい.

1章 LispScheme

LispSchemeの歴史の紹介.1.3節の基本ルールを理解できるように頑張る.

2章 Gaucheの特徴

章が2pとたぶん今まで読んだ本で一番短い.けどGaucheの特徴がぎっしり.
2001年に公開とは私が初めて自分の計算機を手に入れた頃だ.

3章 Common Lispの影響

この章も3pと少ない.
Gaucheはフランス語で"左".コラムを読むまで知らなかった.
ちなみに右は"doroit".

4章 Gaucheの開発スタイル

Gaucheを触ってみる.GaucheのスクリプトエンジンであるgoshはC-hとかヒストリが使えないので,rlwrapというread lineをラップするものを使うととっても便利.
Emacsの話が10p近くある.やはりLispはどうしてもEmacsになってしまうのかな.Schemeの世界ではVim人口が少なそうだ.Vimでいいプラギンないかな...

5章 プログラムの書式

Schemeの拡張子は.scmにする.goshにプログラムを読み込む時mainが定義されていればそれがcallされる.
コメントには3つの種類がある.

  • 行コメント ;
  • ブロックコメント #|から |#まで.ネストも可能
  • S式コメント #;

予約語がないのでユーザが再定義できる.

gosh> (define define 100)
100
gosh> define
100
gosh> (define (sum_of_square x y) (+ (* x x ) (* y y)))
*** ERROR: unbound variabel: x
Stack Trace:

モジュールを使うにはuse構文を使ってSRFIライブラリをロードする.

(use srfi-1)

でもこれだとなんのライブラリかよくわからない.Schemerは何番がどのライブラリかということを把握しているんだろう.

6章 リスト

リストはデータを括弧でくくって表現する.
データとしてリストを扱いたい場合は'(クォート)をリストの前につける.

'(1 2 3)

リストの基本操作

  • car
  • cdr
  • cons
  • list
  • null?
  • pair?

これらを組み合わせることでいろんなことが定義できる.

SICP読書会

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

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


計算機プログラムの構造と解釈の1.1から1.1.7まで進めました.やはりSICPは一筋縄ではいかないです.

1.1.5

今回重要だったのは正規順序の評価と作用的順序の評価.

  • 正規順序の評価 演算子と非演算子を評価し,次に結果の手続きを結果の引数に作用させる.
  • 作用的順序の評価 その値が必要になるまで被演算子を評価しない.

問題1.5で正規順序と作用的順序の評価が同じ結果にならない例.

(define (p) (p))
(define (test x y)
  (if (= x 0)
      0
      y))

という定義があるとき,

(test 0 (p))

を評価すると正規順序の評価では被演算子を評価するのでpが評価される.しかし,pは
pなので無限ループになってしまう.
逆に作用的順序であればpは評価されず先にtestが評価されて

(if (= 0 0)
    0
    (p))

となり,0が戻る.
という理解で正しいのかな.

Scheme面白いよ

ほんの一端をかいま見ただけだったけどScheme面白いよ.