如何在Common Lisp中映射函数?

时间:2014-03-20 02:12:49

标签: map functional-programming lisp common-lisp partial-application

我在Common Lisp中创建了这个函数

(defun f (&key n p x)
    (* (combinacion n x) (expt p x) (expt (- 1 p) (- n x))))

它工作正常。问题是我想在Common Lisp湖中使用以下Haskell函数

ff n p x = sum . map (f n p) $ [0 .. x]

namley,将部分应用于列表的函数f映射。

我创建了以下函数来创建列表

(defun range (&key max (min 0) (step 1))
    (loop for n from min to max by step
        collect n))

并且工作正常,我只需要知道如何进行映射。

1 个答案:

答案 0 :(得分:7)

Common Lisp没有内置的部分应用程序,你只需编写一个lambda表达式来做你想做的事。

(defun map-f (n p limit)
  (let ((x-list (range :max limit)))
    (mapcar #'(lambda (x) (f :n n :p p :x x)) x-list)))