私は、lisp関数に渡される値が、パラメータの名前と一致する見積もりに割り当てられると仮定しました。しかし、私はこれが驚いた:関数のパラメータはどのようにlispに格納されていますか?
(defun test (x) (print (eval 'x)))
(test 5)
は、(変数xはアンバインドされていません)動作しません。したがって、パラメータが関数にシンボルとして格納されていない場合、この例では正確には何xですか?パラメータ名と一致するシンボルからパラメータにアクセスする方法はありますか?
もっとコンテキスト:
defun slice (r1 c1 r2 c2 board)
(dolist (param '(r1 c1 r2 c2)) ;adjust for negative indices
(if (< (eval param) 0)
(set param (+ (length board) (eval param)))))
;Body of function
は基本的に、私は彼らが<をしている場合、それらの値のいずれかに最初の4つのパラメータを反復処理や調整をしたい:私がやりたい何 はこのようなものですもちろん、私はletを実行し、各パラメータについて個別の行を持つことができますが、私は4つのパラメータのそれぞれについて同じことをやっていることを考えると、これはもっときれいに見えました。 しかし、変数R1がバインドされていないというエラーが表示されます。
それは実装固有のものです。 [SBCL](http://www.sbcl.org/manual/index.html)は、Foreign Function Interfaceの章などでいくつかの情報を提供しています。 –