我目前正在使用MIT方案開展家庭作業任務,並且遇到了幾個很短的問題,儘管我對如何實現其中的一些問題有些困惑。計劃 - 帶過濾器的列表函數
一個問題要求我編寫一個函數,該函數返回一個刪除了所有整數的列表。我還是設法解決這個問題,
(define (f2a lst) (map (lambda(x) (remove number? x)) lst))
雖然我很困惑,我該怎麼把它改寫爲不使用刪除,而是使用一個過濾器。 *備註:(f2a '(("a" 1 "b") (2 "c") (-1 "d") (-2)))
返回'(("a" "b") ("c") ("d"))
另外兩個問題是我沒有找到任何解決方案的問題。
他們問我編寫一個函數,返回一個列表,其中包含所有正奇數和負偶數整數。例如,
(f2b '(("a" 1 "b") (2 "c") (-1 "d") (-2)))
回報
(("a" "b") (2 "c") (-1 "d"))
我有一些代碼下來是不正確的,但我覺得說明我是如何試圖接近解決這一個:
(define (f2b lst)
(lambda(x)
(cond ((and (positive? x) (odd? x)) (filter x lst))
((and (negative? x) (even? x)) (filter x lst))
(else "this should never print"))))
最後問題只是要求一個函數返回一個由列表中所有字符串組成的字符串。 (f2c '(("a" 1 "b") (2 "c") (-1 "d") (-2)))
返回「abcd」。
我幾乎設法找出這一個,但當它不斷返回奇怪的值時卡住了。這是我的代碼:
(define (f2c lst)
(lambda(x)
(map (lambda (x) (filter string? x)) lst)
(list x))
(string-append (car lst) (cdr lst)))
就高階語法而言,我僅限於映射,過濾,累加和求和。我不是要求直接回答,而是幫助我弄清楚我需要做什麼。我在做什麼錯我的代碼?任何援助與此非常讚賞。謝謝。
[文檔](http://www.gnu.org/software/mit-scheme/documentation/mit-scheme-ref/Filtering-Lists.html#Filtering-Lists)for'remove'說,「Like過濾器,除了返回的列表僅包含那些不滿足謂詞的元素。「因此,要使用'filter'而不是'remove',只是否定謂詞。 – 2013-05-09 19:50:19