我正在尝试编写一个函数,使得P(x)对于任何整数x都有一个包含三个元素的列表,即n的正方形,立方体和四次幂但我仍然坚持我如何组合然后制作一个功能,例如我有方形,立方体和功率4功能 这是我的职能
(defun p(x) (* x x))
(defun p(x) (* x x x))
(defun p(x) (expt x x) //thought i am not sure about this one
如果我在执行程序后有一个function p(x)
列表,有没有办法让我的结果(即(4 27 256)
)列表看起来像( 2 3 4)
?考虑到mapcar function
虽然我不确定如何能够解决这个问题。有什么建议?
答案 0 :(得分:4)
是的,mapcar
可能是一种方法。
;; a simple solution.
(defun expt-list (n powers)
(mapcar #'(lambda (x) (expt n x)) powers))
;; a bit more complex, so you don't compute powers of the same
;; base multiple times.
(defun expt-list-memoize (n powers)
(let ((hash (make-hash-table)))
(mapcar #'(lambda (x)
(let ((y (gethash x hash)))
(if y y (setf (gethash x hash) (expt n x)))))
powers)))
答案 1 :(得分:1)
Common Lisp中有一个奇怪之处,就是必须要识别:如果你想通过符号引用一个函数,你必须用(函数p)或缩写#'p
鉴于
(defun p(x) (* x x))
你可以用
计算一个方格列表 CL-USER> (mapcar #'p (list 1 2 3 4))
(1 4 9 16)
答案 2 :(得分:0)
这里的要求有点模糊,但如果意图是,如果(expt-list 2 3 4)
之类的调用已经返回了每个数字的列表,例如:
(expt-list 2 3 4)
=> (4 27 256)
会有以下几点:
(defun expt-list (&rest list-of-n)
"return a list of each 'n' in LIST-OF-N raised to its own power"
(loop for n in list-of-n collect (expt n n)))
诀窍?