1

我创建了一个称为满足电影的程序:

(define movies-satisfying          
    (lambda (movies pred selector)
      (map (pred movies))))

这就是我所说的过程。

(movies-satisfying our-movie-database
               (lambda (movie)
                 (= (movie-year-made movie) 1974))
               movie-title)

电影名称=汽车。our-movie-database 是一个电影数据库。

它从数据库中返回有关电影的大量信息,从电影名称、导演、制作日期和演员开始。如何只返回电影标题而不是整个列表?

这是当前返回的内容:

 (((amarcord)
  (federico fellini)
  1974
  ((magali noel) (bruno zanin) (pupella maggio) (armando drancia)))
4

1 回答 1

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

于 2013-10-27T01:07:49.773 回答