在方案中使用map

在方案中使用map,map,scheme,Map,Scheme,我创建了一个称为“满足感”的过程: (define movies-satisfying (lambda (movies pred selector) (map (pred movies)))) 这就是我所说的程序 (movies-satisfying our-movie-database (lambda (movie) (= (movie-year-made movie) 1974))

我创建了一个称为“满足感”的过程:

(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)))

如果不了解更多的代码(如我的评论中所述),就不可能给出一个完美的答案,但我可以概述答案,诀窍是进行两次传递——当然,假设谓词和选择器都已正确定义。例如,一个特定的搜索将如下所示:

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

该代码无法工作。调用
map
的方式是错误的:它需要两个参数。什么是
选择器
,为什么不使用?您确定不打算使用
过滤器
而不是
映射
?你应该发布一个电影数据库的实际例子,否则我们将无法重现这个问题。编辑问题并确保发布的代码能够自行编译和运行,而不会丢失依赖项非常感谢您的提纲,它解决了我的问题!很抱歉这么简单,你帮了我很大的忙@用户2872793我的荣幸!如果你花时间把问题写成一个简短、自包含、可编译的例子,你会得到更好、更快的答案