Racket:在结构列表中对结构的字段应用过滤器

时间:2016-10-13 15:08:41

标签: struct filter racket

请在下面找到我的代码段:

 (define (try los)
    (filter (string=? (person-name (first los)) "Mike") los))

我在这里遇到一些语法错误。我不知道如何在结构列表中对结构的1个特定字段应用过滤器。 (注意:我不想使用递归)。有人可以给我一个相同的例子或帮我纠正我在这里想做的事情吗?

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是创建一个辅助函数mike?,它接受​​一个人结构s并检查名称是否为"Mike"

(define (mike? s)
  (string=? (person-name s) "Mike")

(define (try los)
    (filter mike? los))

答案 1 :(得分:1)

您需要在filter中定义lambda函数:

(filter 
   (lambda(x) (string=? (person-name x) 
                        "Mike")) 
   los)

这样的lambda函数非常有用,通常用于' map',' ormap','和map',' filter',& #39; for-each',' apply',' memf',' findf',' foldl',' foldr相似'等对给定列表的每个成员采取行动。有关许多示例,请参阅here(搜索lambda)。