0
我有一個列表(1 2 3),我需要將其應用於函數(f a b c)。如何在列表中應用列表中的每個項目作爲函數的相應參數
問題的第一部分是合併兩個列表以創建上面的列表,現在我需要插入這些數字作爲參數。我不知道如何做到這一點。我正在考慮使用應用程序或地圖,但我對這些工作如何或者它們是否是正確的方法沒有信心。
謝謝。
我有一個列表(1 2 3),我需要將其應用於函數(f a b c)。如何在列表中應用列表中的每個項目作爲函數的相應參數
問題的第一部分是合併兩個列表以創建上面的列表,現在我需要插入這些數字作爲參數。我不知道如何做到這一點。我正在考慮使用應用程序或地圖,但我對這些工作如何或者它們是否是正確的方法沒有信心。
謝謝。
您正在尋找的過程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) ...)
非常感謝你們所有的例子,讓它工作。 – User9193
是的,「應用」應該這樣做。你試過了嗎?它工作嗎?請張貼你的嘗試的代碼。 – Bergi
申請作品。由於列表是一個函數的結果,我不得不使用「let」來「保留」列表,然後應用工作。 – User9193
你可以不這樣做:'(apply proc(someproc args ...))'如果過程評估爲一個列表,則工作。 – Sylwester