scheme2lisp :: define function并将其作为参数传递

时间:2010-05-28 20:50:04

标签: function functional-programming lisp scheme

我需要将一些代码从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))

2 个答案:

答案 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拍摄。