如何检查列表中是否存在元素,两者都作为函数调用的输入而不使用lambda?我是在尝试会员?但是无法得到它。
(define (find-string (lst lst str ua)
(cond ((member? ua lst) #t)
(else #f))
答案 0 :(得分:2)
首先,lambda
和ormap
的方式(用于测试):
; 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) )
请参阅member
的官方球拍documentation。
请注意,就性能而言,最后一个版本实际上是最差。
答案 1 :(得分:1)
成员的使用会起作用,只是你要添加额外的“?”在函数前面没有必要
(member 2 (list 1 2 3 4)) [1]
会返回true
另一种方法是编写自己的递归函数
(define (is-in-list list value)
(cond
[(empty? list) false]
[(= (first list) value) true]
[else (is-in-list (rest list) value)]))