我目前正在使用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