检查球拍中列表中是否存在元素

时间:2016-03-17 19:47:11

标签: string list racket

如何检查列表中是否存在元素,两者都作为函数调用的输入而不使用lambda?我是在尝试会员?但是无法得到它。

(define (find-string (lst lst str ua)
    (cond ((member? ua lst) #t)
    (else #f))

2 个答案:

答案 0 :(得分:2)

首先,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) )

请参阅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)]))

[1] https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._member%29%29