トップ «前の日記(2002-05-28) 最新 次の日記(2002-05-30)» 月表示 編集

日々の流転


2002-05-29 [長年日記]

λ. 夕方まで寝てた。これでここんとろこの不足分を取り戻したぞー

λ. TinyC

こないだkjanaさんに紹介してもらった TinyC のコードにざっと目を通した。さて、どこから弄るかな……

λ. 誤変換

「総資産」を「荘子さん」と誤変換。あうあう……

λ. 続^2 Y Combinator

[ruby-list:35060]のFは、自分自身が定義域になっているようなnon-well-foundedなタイプなので考えにくくてしょうがない。

こういうのって、超集合論(hypersets)とかを知ってると、わりと楽に考えられたりするのだろうか?

λ. ところで、Y Combinator のようなトリッキーな事をしなくても同じことが出来るような仕組みを大抵の言語は持ってるのね。

Schemeではletrecを使う
(define fact
  (letrec ((f (lambda (n)
                (if (zero? n)
                    1
                    (* n (f (- n 1)))))))
    f))
Haskellのletは他の言語でのletrecに相当する
fact =
    let f n = if n == 0 then 1 else f (n - 1) * n
    in f
Common Lisp だとlabelsを使う
(defun fact (n)
  (labels
      ((f (n)
          (if (zerop n)
              1
              (* n (f (- n 1))))))
    (f n)))
Smalltalk
使ったこと無いけど、thisContextという特殊変数でブロック自身を参照できるそうだ。