5

だから私はこれを行うことができます:

(defparameter *some-function* ... ; returns lambda later

またはこれ:

(defun some-function ...

どちらでも、次を使用できますfuncall

(funcall 'some-function ... また (funcall *some-function* ...

このdefunバージョンでは、次のこともできます。

(some-function ...

関数でそれを行うことはできませんdefparameter

defparametersome-function後で別の関数 (または非関数データを含むその他のもの) に再割り当てするためのより簡単な手法を提供します。

しかし、これらの 2 つの点以外に、これらを使用する際に他に考慮すべきことは何ですか?

4

1 に答える 1

9

リンゴとオレンジを比較しているので、これは奇妙な答えです。

これを見ているLispの初心者にとって、defparameterは動的変数を定義するためのものであり、defunは関数を定義するためのものです。

defun を使用せずに関数をプログラムで再割り当てできるかどうか心配な場合は、以下を確認してください。

CL-USER> (defun jam () (print 'some-jam))
JAM

CL-USER> (jam)
SOME-JAM 

CL-USER> (setf (symbol-function 'jam) (lambda () (print 'some-ham)))
#<FUNCTION (LAMBDA ()) {1004C033DB}>

CL-USER> (jam)
SOME-HAM 

したがって、関数の再割り当てに関しては、 defparameter には利点がありません。また、関数を再定義したい場合は、コンパイル コマンドを調べることができます。

于 2013-10-31T14:51:09.607 に答える