1

関数を定義するには、defun と lambda の 2 つの方法があり、setf を使用して lambda 関数にラベルを付けることができます。

(defun g (x) (* x x)) 
(setf f (lambda (x) (+ x x)))

関数は、リストの最初の要素にすることができます。

(g 3)
9

または、他の関数のパラメーターにすることもできます。

(mapcar #'g '(1 2 3))
(1 4 9)    

ただし、ラムダでは、使用方法が異なります。

(funcall f 3)
6

(mapcar f '(1 2 3))
(2 4 6)

違いの背後にあるロジックは何ですか?

スキームのかなり一貫した使用例と比較すると、さらに混乱します。

> (define (g x) (+ x x))
> (g 3)
6
> (map g '(1 3 4))
(2 6 8)

> (define f (lambda (x) (* x x)))
> (f 2)
4
> (map f '(1 2 3))
(1 4 9)
4

1 に答える 1

3

Kent Pitman の論文Technical Issues of Separation in Function Cells and Value Cells を参照してください。

于 2013-06-02T02:41:34.040 に答える