アカウント名:
パスワード:
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ見習い
表に書くほど自信が無いのでこちらで…… (スコア:1)
は
(define foo (lambda (n) #'(lambda (i) (incf n i))))
と等価なので、これを評価すると引数をひとつ取る foo という関数ができる。つまり、
foo => (lambda (n) #'(lambda (i) (incf n i)))
ということになる。で、これを使うには例えば、
(defvar bar (foo 5))
を評価すると
bar => #'(lambda (i) (incf 5 i))
という、5 を初期値とした bar というアキュムレータができて、
(funcall bar 3)
を評価すると 8 が返り、かつ副作用として
bar => #'(lambda (i) (incf 8 i))
になっている(incf は最初の引数の先を書き換えちゃうから)。その後でまた
かわりにRubyでやってみました (スコア:1)
irb(main):001:0> def foo(n)
irb(main):002:1> lambda {|i| n += i}
irb(main):003:1> end
=> nil
irb(main):004:0> bar = foo(5)
=> #<Proc:0x40222a3c@(irb):2>
irb(main):005:0> bar.call(3)
=> 8
irb(main):006:0> bar.call(7)
=> 15
irb(main):007:0> qux = foo(1)
=> #<Proc:0x40222a3c@(irb):2>
irb(main):008:0> qux.call(2)
=> 3
irb(main):009:0> qux.call(3)
=> 6
irb(main):010:0> bar.call(1)
=> 16 (barとquxとは独立)
love && peace && free_software
t-nissie