我需要将一些代码从Scheme转换为Common Lisp。现在,我有这样的事情:
(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))
但它会产生错误。
*** - DEFUN:函数的名称必须是符号,而不是(IDENT X)
帮助我。 感谢
UPD 原始代码:
(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))
答案 0 :(得分:1)
我想我得到了你想要的东西......
(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))
或更多CLish,没有明确地说明身份:
(defun sum-int (a b)
(sum (lambda (x) x) a #'1+ b))
你需要#'引用来获取一个函数对象,因为CL具有单独的函数名称(用defun定义)和变量。
答案 1 :(得分:1)
(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)))
使用FLET(未经测试)进行另一次CL拍摄。