List 常见lisp函数的表达式和算法

List 常见lisp函数的表达式和算法,list,functional-programming,lisp,common-lisp,List,Functional Programming,Lisp,Common Lisp,我试图写一个函数,使得p(x)对于任何整数x都有一个由三个元素组成的列表,即平方、立方体和n的四次方,但我一直在思考如何组合,然后生成一个函数,例如,我有平方、立方体和四次方函数 下面是我的功能 (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 如果在执行程序后我有一个(2 3 4)列表,有什么方法可以使我的结果(即函数p(x))

我试图写一个函数,使得p(x)对于任何整数x都有一个由三个元素组成的列表,即平方、立方体和n的四次方,但我一直在思考如何组合,然后生成一个函数,例如,我有平方、立方体和四次方函数 下面是我的功能

(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

如果在执行程序后我有一个
(2 3 4)
列表,有什么方法可以使我的结果(即
函数p(x)
)列表看起来像
(4 27 256)
?我正在考虑映射车的功能,虽然我不知道该怎么做。有什么建议吗

是的,
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)))

在Common Lisp中有一个奇怪的地方,我们必须认识到:如果你想通过符号引用函数,你必须用(函数p)或缩写#'p来引用它

给定

(定义p(x)(*x))

您可以使用

CL-USER>(mapcar#p(列表1、2、3、4))


(1 4 9 16)

此处的要求有点模糊,但如果意图是,调用
(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)))

玩这个把戏吗?

如果你想创建一个列表,函数<代码>列表如何??我想了一下,但我只是一个新手,不知道如何操作函数显示我是否输入了数字或参数,它给出了一些错误我不知道为什么我在最后得到了expt list,但当我输入时(expt list 2 3 5)它不起作用,我错过什么了吗?