2

このドキュメントによると:http://cl-cookbook.sourceforge.net/functions.html

(defun adder (n)
  (lambda (x) (+ x n)))
(funcall (adder 12) 1)

私はfuncallを使用して呼び出す必要があります(加算器12)、そしてfuncallを何度も書くことは非常に無視されています、スキームでそれのようなコードを書く方法はありますか?

((adder 12) 1)
4

2 に答える 2

6

いいえ、ありません。

機能として見ることもできます。関数オブジェクトの呼び出しを明示的にし、ソース コードの理解を向上させます。

于 2012-10-18T17:52:44.707 に答える
1

ただし、次のようなものを使用することもできます(理由はわかりませんが、入力する文字数はSchemeの場合と同じになります)。

(set-macro-character
 #\[
 #'(lambda (stream char)
     (declare (ignore char))
     (set-syntax-from-char #\] #\;)
     (let ((forms (read-delimited-list #\] stream t)))
       (set-syntax-from-char #\] #\x)
       (append '(funcall) forms))))

(defun adder (n)
  #'(lambda (x) (+ x n)))

(format t "sum: ~s~&" [(adder 12) #x128]) ;; 308

角かっこが含まれる変数名に遭遇した場合、これにより問題が発生する可能性があります。確かに、それを使用するのはあなた次第です、あなた自身が警告されていると考えてください。

于 2012-10-19T13:56:18.927 に答える