Adr*_*ian 2 lisp functional-programming common-lisp map partial-application
我在Common Lisp中创建了这个函数
(defun f (&key n p x)
    (* (combinacion n x) (expt p x) (expt (- 1 p) (- n x))))
Run Code Online (Sandbox Code Playgroud)
它工作正常.问题是我想在Common Lisp湖中使用以下Haskell函数
ff n p x = sum . map (f n p) $ [0 .. x]
Run Code Online (Sandbox Code Playgroud)
namley,将f部分应用的功能映射到列表.
我创建了以下函数来创建列表
(defun range (&key max (min 0) (step 1))
    (loop for n from min to max by step
        collect n))
Run Code Online (Sandbox Code Playgroud)
并且工作正常,我只需要知道如何进行映射.
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)))
Run Code Online (Sandbox Code Playgroud)