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


QiでL-99 (P22 指定した範囲の数列のリスト)

| 18:18 | QiでL-99 (P22 指定した範囲の数列のリスト) - わだばLisperになる を含むブックマーク はてなブックマーク - QiでL-99 (P22 指定した範囲の数列のリスト) - わだばLisperになる

(range 0.5 10)
\=> [0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5]
\

(define range 
  Start End -> [ ] where (> Start End)
  Start End -> [Start | (range (+ 1 Start) End)])

GOOでL-99 (P06 回文的かを調べる)

| 18:11 | GOOでL-99 (P06 回文的かを調べる) - わだばLisperになる を含むブックマーク はてなブックマーク - GOOでL-99 (P06 回文的かを調べる) - わだばLisperになる

意味なく、回文数にも対応してみました。

(palindrome '(x a m a x)) ;=> #t
(palindrome #(x a m a x)) ;=> #t
(palindrome "xamax")      ;=> #t
(palindrome 12321)        ;=> #t

(dm palindrome (u|<col>)
  (= u (rev u)))

(dm palindrome (u|<num>)
  (palindrome (num-to-str u)))

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

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080406