我有以下的代碼,這被認爲是一個高階函數,其過濾基於所述&key
參數元件輸入(在這種情況下:year
,:month
和:type
。使用除去-IF-不與&關鍵參數
(defun filter-by (&key year month type)
"Remove members of the list not matching the given year and/or month and/or type, returns a
function that takes the list"
(lambda (lst)
(remove-if-not #'(lambda (element)
(when year
(equalp (local-time:timestamp-year (get-record-date element))
year)))
(when month
(equalp (local-time:timestamp-month (get-record-date element))
month)))
(when type
(equalp (get-type element)
type))))
lst)))
的問題是,除非使用所有的關鍵字參數,它總是返回nil
,我因爲如何when
表單內remove-if-not
行爲猜測。
反正有沒有訴諸多個cond
陳述這項工作? cond
的問題是,我將不得不特別是寫下所有可能的參數組合,這對3個參數是可以的,但是如果將來我想使用其他關鍵字進行過濾。
代碼中並沒有太大的意義,因爲括號設置不正確。您可能想要正確縮進該功能,然後修復語法錯誤。 –
問題是你沒有合併'equalp'形式的結果,所以實際上只有最後一個重要。在'when'表格周圍使用'或'。 – acelent
爲什麼在函數中有外部lambda?該函數返回函數而不是過濾列表。 – enrey