Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2008-04-06

Arcでletrec、内部define

| 03:32 | Arcでletrec、内部define - わだばLisperになる を含むブックマーク はてなブックマーク - Arcでletrec、内部define - わだばLisperになる

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でローカル束縛を作れば、大域定義になるのを防げる。