パスワードを忘れた? アカウント作成
476436 journal

Uminchuの日記: (define (foo bar) (hoge hage..) に気をつけろ!

日記 by Uminchu

(define (foo bar) (hoge hage..)
の様な形でいつも関数を定義していた。
一応、これがlambdaを使ったSyntax Sugarであることは
知っていたが、全く気にしていなかった。
しかし、SICP3.1.1のnew-widthdraw関数を試してみていて
いつものdefineが使えないことに気づいた

最初はこんな書き方をしていた
(define (new-widthdraw amount)
  (let ((balance 100))
    (if ... 続きは同様

だが、表示されるのは毎回100-amount。
んで、ちゃんと教科書通り書くとうまくいく。
なるほど。従来の書き方だと、束縛した関数が実行される環境を
コントロールできないことに気づいた。

今まで、「環境」はCで言う「スコープ」や「名前空間」
みたいなもんだと思っていたが、結構重要なのねと実感した。

477056 journal

Uminchuの日記: 問題1.5と問題1.6

日記 by Uminchu

問題1.5
最初に評価してしまうapplicative orderだと
(p)が無限ループに陥ってしまう。
normal orderだとyは評価されないから大丈夫

問題1.6
これも1.5と似たような現象。
ifが普通の手続きだと、再帰関数を評価してしまい
無限ループ化する。

前に、f(a)||f(b) (f(x)は副作用を持ち、boolを返す)
みたいな書き方をして、f(b)が実行されなくてはまったことが
あって、なんでこんな実装になっているんだと思ったことがあったが
applicative orderな処理系だと
こういう実装をしないと再帰関数のような処理がかけなくなって
しまうということか。

477110 journal

Uminchuの日記: Schemeおもしろし

日記 by Uminchu

最近、Schemeにはまりこんだ。
しかし、自由度が高すぎて、何から勉強してよいかわからん。
手続き型とは、ぜんぜんプログラミングスタイルが違う故、
どーゆー書き方をすればよいかもわからん。
故に、SICP(魔術師本と言うらしいが)をかった。
暇があれば、結城さんのようにSICP日記を書こうと思う。

typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...