2

我在 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))

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

4

1 回答 1

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)))
于 2014-03-20T02:18:52.687 回答