gpt4 book ai didi

scheme - 将函数列表映射到列表

转载 作者:行者123 更新时间:2023-12-01 11:52:00 26 4
gpt4 key购买 nike

这是作业,所以我不想要答案。我只需要朝正确的方向插入。我需要将多个函数映射到列表中。例如:

(map-multi (list plus-one square) '(4 5 6)) => (25 36 49)

我能够让它把第一个函数映射到列表的元素,但是,在那之后我就迷路了。另外,由于这是介绍性的,我仅限于介绍性功能(constappendcarcdr成员等)

(define (map-multi f l)  
(cond
((null? l)
l)
(else (cons ((car f) (car l))
(map-multi f (cdr l))))))

最佳答案

您需要组合您在f 参数中收到的函数。为简单起见,假设列表中只有两个函数 - 那么您需要将第一个函数应用于数字列表中的当前元素,然后将第二个函数应用于其结果。如果可以使用compose程序继续它并更改代码中的这一行:

((car f) (car l)) ; you're applying only the 1st function! what about the 2nd?

...用这个:

((compose (cadr f) (car f)) (car l))       ; now we're applying both functions

如果你不能使用compose,那么用这一行替换同一行:

((cadr f) ((car f) (car l)))               ; now we're applying both functions

现在,如果问题更普遍,并且您需要映射具有两个以上 元素的函数列表,那么再次用以下代码替换代码中的同一行:

((compose-multi f) (car l))

并通过连续调用 compose 来实现一个辅助函数,该函数组合并返回列表中的所有函数。考虑到这是家庭作业,这留给您作为练习 - 但如果您理解上述代码如何仅针对两个函数工作,那么将结果扩展为多个函数列表应该很容易:

(define (compose-multi flist)      ; procedure for composing a list of functions
(if (null? flist) ; if the list is empty then
<???> ; return the identity function
(<???> (compose-multi <???>) ; else compose the result of recursive call
<???>))) ; with the current element in the list

请注意,处理函数列表中没有元素的情况需要恒等函数;它的定义非常简单,它只返回作为参数传递的相同值。

还要注意 compose-multi 返回一个 function,这是组合列表中所有函数的结果 - compose 这样做是为了你,但如果你不被允许使用它,请记住:

(compose x y)

...等同于:

(lambda (n) (x (y n)))

关于scheme - 将函数列表映射到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10665906/

26 4 0
文章推荐: jdbc - 使用 Glassfish 连接到 h2 数据库
文章推荐: forms - 如何在GWT 中实现服务器端防止双重提交?
文章推荐: r - 如何在多列中构建因子变量分布
文章推荐: dart - 在 Dart 中获取所选