3

我正在尝试编写一个函数,使得任何整数 x 的 P(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

4

3 回答 3

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)))
于 2012-10-08T19:58:57.437 回答
1

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

给定

(defun p(x) (* x x))

你可以计算一个正方形列表

CL-USER> (mapcar #'p (list 1 2 3 4))

(1 4 9 16)

于 2012-10-09T08:07:44.107 回答
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)))

做这个把戏?

于 2012-10-09T12:31:27.400 回答