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-01

GOOのdef

| 00:09 | GOOのdef - わだばLisperになる を含むブックマーク はてなブックマーク - GOOのdef - わだばLisperになる

GOOではdefを使って、

(df foo (n)
  (def x (* n 2))
  (lst x))

のように、囲いのないletのような感じで使うことができるのが面白い、と思っていたが、良く考えると、schemeでも、

(define (foo n)
  (define x (* n 2))
  (list x))

と書けば良いだけだった。

Arcでは、当初"="で

(def foo (n)
  (= x (* n 2))
  (list x))

同じことができるようにするつもりだったと7年前の試案では書いてあるが、現状のArcでは、ローカルで宣言された変数以外に代入した場合、トップレベルの値を書き換えることもある。

;; scheme
(define (foo n)
  (let ()
    (define x (* n 2)))
  (list x))

(foo 8) ;=> error

;; GOO
(df foo (n)
  (let ()
    (def x (* n 2)))
  (list x))

(foo 8) ;=> error

;; Arc
(def foo (n)
  ((fn () 
    (= x (* n 2))))
  list.x)
(foo 8) ;=> (16)

x ;=> 16