我创建了一个名为movies-satisfying的程序:
(define movies-satisfying
(lambda (movies pred selector)
(map (pred movies))))
这就是我调用程序的方式。
(movies-satisfying our-movie-database
(lambda (movie)
(= (movie-year-made movie) 1974))
movie-title)
电影名称=汽车。 我们的电影数据库是电影数据库。
从电影标题,导演,制作日期和演员开始,从数据库返回有关电影的大量信息。如何仅返回电影标题而不是整个列表?
这是目前返回的内容:
(((amarcord)
(federico fellini)
1974
((magali noel) (bruno zanin) (pupella maggio) (armando drancia)))
答案 0 :(得分:2)
在不知道更多代码的情况下(如我的评论中所述),不可能给出完美的答案,但我可以概述答案,诀窍是两次通过 - 当然,假设谓词和选择器已正确定义。例如,特别是搜索将如下所示:
(map (lambda (movie) ; 2nd pass: obtain the names of the movies returned by 1st pass
(movie-title movie))
(filter (lambda (movie) ; 1st pass: obtain only the movies of a given year
(= (movie-year-made movie) 1974))
our-movie-database))
要将上述内容编写为可参数化函数,只需将lambdas
作为参数传递:
(define movies-satisfying
(lambda (movies pred selector)
(map selector (filter pred movies))))
另请注意,filter
必须用于查找给定谓词的匹配项,map
将始终返回与原始输入列表大小相同的列表。