2012-10-08 35 views
3

我試圖寫的函數,使得P(x)的任何整數x有三個元件,即正方形,立方體,和n的第四功率但我的列表米停留在我怎能再結合起來,使一個功能,例如我有平方,立方和電源4功能 這裏有以下表達式和arithemetics在共同LISP函數

(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,雖然我不知道如何去做。有什麼建議麼?

+1

,如何對功能'LIST'? –

+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))) 
+0

我如何輸入數字或參數它提供了一些錯誤,我不知道爲什麼 –

+0

即時得到EXPT名單在最後,但是當我進入(實驗 - 列表2 3 5)它不工作,我錯過了什麼? –

1

有Common Lisp中的一個怪胎,一個人必須認識到:如果你想通過一個符號來指代功能,你將與(函數P)引用,或與abbrevation#」 p

鑑於

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

可以計算平方的清單,

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

(1 4 9 16)

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))) 

做的伎倆?

如果你想創建一個列表