在方案中使用地图

时间:2013-10-27 00:36:09

标签: map scheme

我创建了一个名为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)))

1 个答案:

答案 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将始终返回与原始输入列表大小相同的列表。