質問
いている方もいるかもしれません使用#'とともにラムダ?通常、書こうかと思います。これらの線のように等しい:
> (mapcar #'(lambda (x) (+ x 1)) '(1 2 3))
(2 3 4)
> (mapcar (lambda (x) (+ x 1)) '(1 2 3))
(2 3 4)
誰でもケアの啓発的な初心者の違いは?
解決
#'
は、(代わりにそれを適用する)関数へのポインタを返すfunction
の短縮形です。 lambda
は、関数を返し、その関数へのポインタをしたいのが普通です。これは非常に一般的ですので、同様lambda
と呼ばれているあなたのためにそれを行います(変数空間での)マクロは、もあります。コードの両方の行が同一である。
優れているがのLisp-1 / Lispの-2議論するにダウンしています: Common Lispの中で、あなたは、どちらかのマクロのおかげで行うことができます。いつものように、一貫してます。
他のヒント
異なりますので様々なLisp言.以下の利用Common Lisp:
第 #'で表記(機能---).そのため、以下のみ言葉が異なるCommon Lispを読み込みと同じです:
#'(lambda (x) (* x 2))
や
(function (lambda (x) (* x 2)))
#'であるreadmacro、変換時のLispコードを読み込みによるLispシステム。
場合はLispの評価
(function (lambda (x) (* x 2)))
の Lispシステムを作成し、関数オブジェクトと機能として返しますその価値.
なので、必要なときにいつでも数値として、それを記述する必要がありますそのようにしています。機能としての価値が必要な時に渡したいので他の機能として引数に戻したいときから、機能やしたいときに大切に保管してくださ可変となります。例:
(map #'(lambda (x) (* x 2)) '(1 2 3))
(defun (y) #'(lambda (x) (* x y)))
(defparameter *twice-fn* #'(lambda (x) (* x 2)))
などから持ち直している"という(ラムダ(x)(*2))?
では異なるものであるとの考え方によってはコンテキスト
ラムダ式
のラムダに表現するのではなく、使用可能な機能名:
(function foo) and (function (lambda (x) (* x 2)))
や
(foo 17) and ((lambda (x) (* x 2)) 17)
上記の二つの法律上のCommon Lisp構文です。がラムダ仕様の表現に使用できます。
なお、以下の二つの形式 違法 共通Lisp:
(#'(lambda (x) (* x 2)) 17) ; illegal in Common Lisp
(function #'(lambda (x) (* x 2))) ; illegal in Common Lisp
マクロ
中Common Lisp標準化プロセスマクロラムダが追加されていたので、最初の説明、CLtL1、Common Lisp).で書くことが可能にわずかに短いコードです。例:
(lambda (x) (* x 2))
上記の場合LAMBDAはクリックします。中のマクロ展開で拡大できるよう:
(function (lambda (x) (* x 2)))
覚えていること上記の関数形は、内部のラムダがラムダ仕様の表現はこの機能は拡張されます。
そこで、三つの事例からこれを実現するために、まず書いて:
(map (lambda (x) (* x 2)) '(1 2 3))
(defun (y) (lambda (x) (* x y)))
(defparameter *twice-fn* (lambda (x) (* x 2)))
これによって短縮、サービスをごちゃごちゃとるように見えますと類似スキームのコードです。だからよりよいプログラマを使用読み書きのスキームのコードです。
概要
a)(function(λ(x)(*2)がtrueを書くコードを返す関数としての値です。
b)#'(λ(x)(*2))の短縮表記の上
c)(ラムダ(x)(*2))のもの短縮によっては、マクロ展開の形です。