#:g1: Arcでletrec、内部define

Posted 2008-04-05 18:32:00 GMT

ArcにはSchemeのletrecや、CLのlabelsに相当する構文がないのだけれど、

(def fact (n)
  (let f1 ()
    (= f1
       (fn (c acc)
         (if (is 0 c)
             acc
             (f1 (- c 1) (* c acc)))))
    (f1 n 1)))
のように書くことになるのだろうか。
同様に内部defineは、
(def fact (n)
  (let f1 ()
    (def f1 (c acc)
      (if (is 0 c)
          acc
          (f1 (- c 1) (* c acc))))
    (f1 n 1)))
のように書くことになるのだろうか。
どっちにしろ、letでローカル束縛を作れば、大域定義になるのを防げる。

comments powered by Disqus