成员?球拍中的功能

acu*_*cie 5 scheme racket

我正在加州大学伯克利分校网站上关注 2011 年 Brian Harvey 的 SICP 讲座。他正在使用STk 解释器来授课,而我则使用球拍和 DrRacket 来进行教学。我试图定义他在类中使用的所有未在球拍中定义的函数(即word,,,)以进行额外练习butfirstbutlast

我在尝试定义 时遇到了一个问题member?。他能够在列表和字符串上使用它,做类似的事情

(member? 1 (list 1 2 3 4)) ;; works
(member? 'a '(a e i o u)) ;; works
(member? 7 17) ;; doesn't work
(member? #\e "Hello") ;; doesn't work
Run Code Online (Sandbox Code Playgroud)

member?这是我对上述内容起作用/不起作用的定义:

(define (member? u lst)
  (not (equal? (member u lst) #f)))
Run Code Online (Sandbox Code Playgroud)

所以这是在处理一个列表,所以前两个是有意义的,它们正在工作。是否有可能创建一个member?在 STk 中模仿的函数?我正在查看文档,看起来字符串、列表、非负整数和一堆其他东西都被定义为sequence数据类型,但我找不到相关的序列函数。

Chr*_*ung 4

您可以sequence-ormap为此使用:

(define (member? item seq)
  (sequence-ormap (lambda (x)
                    (equal? item x))
                  seq))
Run Code Online (Sandbox Code Playgroud)

去测试:

> (member? 7 17)
#t
> (member? #\e "Hello")
#t
Run Code Online (Sandbox Code Playgroud)

  • `lambda` 创建一个函数,但 `lambda` 本身不是一个函数。:-) 但是,是的,它直接映射到“函数 (x) ...”概念。 (3认同)