在方案中使用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我的荣幸!如果你花时间把问题写成一个简短、自包含、可编译的例子,你会得到更好、更快的答案