I need to translate some code f开发者_JS百科rom Scheme to Common Lisp. Now, I have something like this:
(defun sum (term a next b)
(if (> a b)
0
(+ (term a) (sum term (next a) b))))
(defun sum-int (a b)
(defun (ident x) x)
(sum ident a 1+ b))
but it produces errors.
*** - DEFUN: the name of a function must be a symbol, not (IDENT X)
Help me plese. Thanks
upd original code:
(define (sum term a next b)
(if (> a b)
0
(+ (term a) (sum term (next a) b))))
(define (sum-int a b)
(defun (identity x) x)
(define identity a 1+ b))
(defun sum (term a next b)
(if (> a b)
0
(+ (funcall term a) (sum term (funcall next a) next b))))
(defun sum-int (a b)
(flet ((ident (x) x))
(sum #'ident a #'1+ b)))
Just another CL take with FLET (untested).
I think I got the gist of what you were looking for...
(defun sum (term a next b)
(if (> a b)
0
(+ (funcall term a) (sum term (funcall next a) next b))))
(defun ident (x) x)
(defun sum-int (a b)
(sum #'ident a #'1+ b))
Or more CLish, without explicitly defuning ident:
(defun sum-int (a b)
(sum (lambda (x) x) a #'1+ b))
You need #' quoting to get a function object since CL has separate namespaces for functions (defined with defun) and variables.
精彩评论