use*_*963 0 lisp loops clisp functional-programming common-lisp
我需要一些帮助来在 common lisp 中重写这个函数而不使用 usin SET
,SETF
或者SETQ
(我也不能使用循环),我希望有人可以帮助我。这是代码:
(defun apply-values (DictValues Monomial)
(let ( (Coeff (monomial-coefficient Monomial))
(Vars (varpowers Monomial))
(Acc 1) )
(mapcar (lambda(x)
(setf Acc
(* Acc (expt (cdr (assoc (varpower-symbol x)
DictValues))
(varpower-power x)))))
Vars)
(* Coeff Acc)))
Run Code Online (Sandbox Code Playgroud)
我的问题是在以 开头的行mapcar
。
在此先感谢您的帮助!
对列表的重复累积操作称为归约:
(defun apply-values (DictValues Monomial)
(reduce #'*
(mapcar
(lambda (x)
(expt (cdr (assoc (varpower-symbol x) DictValues))
(varpower-power x)))
(varpowers Monomial))
:initial-value (monomial-coefficient Monomial)))
Run Code Online (Sandbox Code Playgroud)
使用正确适合情况的高阶函数可以实现函数式风格,而无需显式命名临时值。代码更加清晰,人类编码员不易出错。