页: 1 页: 1 简而言之,请允许我指出,名单上只有两个职能——因此,你需要将第一项职能适用于人数清单中的现有内容,然后将第二项职能适用于结果。 如果您能够使用code>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))
通过接连电话< 编码>兼容<> > 代码/代码>,履行构成和回收清单中所有职能的辅助职能。 这是一项留给你的工作,因为这项工作是家务,但如果你理解上述法典如何只发挥两项职能,那么就应当很容易地扩大多重职能清单的结果:
(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<>em>,其结果为:将清单中的所有职能编为compose
。 你们就是这样做的,但是,如果你再次不允许使用它,那就只是记住:
(compose x y)
......
(lambda (n) (x (y n)))