功能和二进制操作

时间:2012-09-27 09:55:31

标签: lisp

我想创建一个功能:OP从i=np = f(i) OP是二元运算符

这是我的功能

(defun sigmaOP (f o n p)
(loop for i from n to p do
(let (val (o (val (funcall f i))))
)
val
)

f是一个功能 o是运营商 n是开始和结束

打电话给我使用

(sigmaOP (lambda (x) (* 2 x)) '+ 1 3)

但它不起作用 o参数不被视为运算符。 如果我删除o而不是+ or *, ...

,则此功能有效

由于

1 个答案:

答案 0 :(得分:0)

运营商也是一种呼叫功能,因此您需要在o之前加funcall,或将其用作呼叫中的参数,例如减少。你在想这样的事吗?

(defun sigmaOP (f o n p)
  (reduce o
    (loop for i from n to p
          collect (funcall f i))))

呼叫:

(sigmaOP (lambda (x) (* 2 x)) #'+ 1 3)