请在下面找到我的代码段:
(define (try los)
(filter (string=? (person-name (first los)) "Mike") los))
我在这里遇到一些语法错误。我不知道如何在结构列表中对结构的1个特定字段应用过滤器。 (注意:我不想使用递归)。有人可以给我一个相同的例子或帮我纠正我在这里想做的事情吗?
答案 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)。