2
Design a function that consumes a [Listof Number] and checks if 0 is in the list.

我想用lambda. 我一直在读这本书,这就是我迄今为止想出的。我希望我很接近。

(define (five? lon)
  (..... (lambda (x)
           (= x 5))
         lon))

你将如何完成这个(如果正确的话)?

4

2 回答 2

1

假设正在搜索的数字是5(根据代码而不是问题描述推断) - 有一个过程已经完成了所要求的,它被称为member

(member 5 '(1 3 5 7))
=> '(5 7)

其中,根据文档:

找到 lst 的第一个相等的元素?to v. 如果存在这样的元素,则返回从该元素开始的 lst 的尾部。否则,结果为#f。

但是,如果我们要从头开始实施类似的过程,解决方案将如下所示,填空:

(define five?
  (lambda (lon)
    (if <???>                 ; is the list empty?
        <???>                 ; then the number is not in the list
        (or <???>             ; otherwise the current element is 5 or
            (five? <???>))))) ; the number is in the rest of list

不要忘记测试您的代码:

(five? '())
=> #f
(five? '(1 2 3 6 7 9))
=> #f
(five? '(1 2 3 5 7 9))
=> #t
于 2013-03-10T04:18:13.973 回答
1

是的!签出ormap功能。

程序

(ormap proc lst ...+) → any
  proc : procedure?
  lst : list?

从球拍文档:

在将proc应用于lst的每个元素的意义上类似于map,但是

  • 如果proc的每个应用程序都产生#f,则结果是#f;和

  • 结果是第一次应用 proc 产生的值不是#f,在这种情况下,proc 不会应用于 lsts 的后面元素;proc 对 lsts 的最后一个元素的应用相对于 ormap 调用处于尾部位置。

于 2013-03-10T02:19:49.707 回答