3

任意の整数 x に対して P(x) という関数を作成しようとしています。つまり、n の 2 乗、3 乗、4 乗の 3 つの要素のリストがありますが、どのように組み合わせて作成するかについて悩んでいます。たとえば、1つの関数には、正方形、立方体、および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 には、認識しなければならない奇妙な点が 1 つあります。シンボルを介して関数を参照する場合は、(関数 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 に答える