【发布时间】:2013-03-12 12:37:03
【问题描述】:
我目前正在与 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)))
在高阶语法方面,我仅限于映射、过滤、累加和求和。我不是要直接回答,而是要一些帮助来帮助我弄清楚我需要做什么。我的代码做错了什么?非常感谢您对此提供的任何帮助。谢谢。
【问题讨论】:
-
the documentation for
remove说,“就像过滤器,只是返回的列表只包含那些不满足谓词的元素。”因此,要使用filter而不是remove,只需否定您的谓词即可。
标签: string list map filter scheme