在Racket中检查元素是否存在于列表中

5
如何在不使用lambda的情况下检查一个元素是否存在于列表中,这两个参数都是从函数调用中获取的?我尝试了member?但是无法得到结果。
(define (find-string (lst lst str ua)
    (cond ((member? ua lst) #t)
    (else #f))

看起来你正在尝试在过程声明中指定每个参数的类型?但在Racket中并不是这样工作的。 - Óscar López
这个可能会有所帮助:https://dev59.com/X0fRa4cB1Zd3GeqP5wpE - GDP2
2个回答

4

我不确定你是否在提问。请避免使用需要在结尾加问号的句子 - Noel Widmer
1
"?" 是一个运算符,不是用来提问的,现在已经添加了引号。 - Amandeep Singh

3

首先,使用lambdaormap的方法(用于测试):

; ismember? :: String List-of-Strings -> Bool
(define (ismember1? str strs) (ormap [lambda (s) (string=? s str)] strs) )

第二种方法,使用“for/or”,没有使用“lambda”:
(define (ismember2? str strs) 
   (for/or ([s (in-list strs)])
      (string=? s str) ) )

第三种方式,使用member,不使用lambda

(define (ismember3? str strs) (if [member str strs] #t #f) )

请参考官方的 Racket 文档 member

注意,最后一个版本在性能方面实际上是最差的


但是,OP的参数顺序被颠倒了。因此,他们打算的函数可能更好地命名为“包含”。 - Will Ness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接