2016-10-09 41 views
0

我有一個列表(1 2 3),我需要將其應用於函數(f a b c)。如何在列表中應用列表中的每個項目作爲函數的相應參數

問題的第一部分是合併兩個列表以創建上面的列表,現在我需要插入這些數字作爲參數。我不知道如何做到這一點。我正在考慮使用應用程序或地圖,但我對這些工作如何或者它們是否是正確的方法沒有信心。

謝謝。

+0

是的,「應用」應該這樣做。你試過了嗎?它工作嗎?請張貼你的嘗試的代碼。 – Bergi

+0

申請作品。由於列表是一個函數的結果,我不得不使用「let」來「保留」列表,然後應用工作。 – User9193

+0

你可以不這樣做:'(apply proc(someproc args ...))'如果過程評估爲一個列表,則工作。 – Sylwester

回答

1

您正在尋找的過程apply

(+ 1 2 3) ; ==> 6 

(let ((lst '(1 2 3))) 
    (apply + lst)) ; ==> 6 

應用還可以在列表之前採取額外的參數..例如。

(let ((lst '(1 2 3))) 
    (apply + 2 lst)) ; ==> 8, same as (+ 2 1 2 3) 

也知道Scheme中的+只是一個變量。它可能在你的let被綁定,以及:

(let ((lst '(1 2 3)) 
     (+ (lambda args (apply * args)))) 
    (apply + 2 lst)) ; ==> 12, same as (* 2 1 2 3) 

所以,想象一下你想要做在同一組數據的多個操作方法。例如。將x,y,z應用於此列表的結果是什麼:

(let ((lst '(4 3 2)) 
     (procs (list + - * /))) 
    (map (lambda (proc) 
     (apply proc lst)) 
     procs)) 

; ==> (9 -1 24 2/3), same as (list (apply + lst) (apply - lst) ...) 
+0

非常感謝你們所有的例子,讓它工作。 – User9193

相關問題