【发布时间】:2017-03-05 00:22:11
【问题描述】:
compose 函数首先应用最后一个函数,即它以相反的顺序应用发送的函数。例如:
((compose sqrt add1) 8)
上面会加 1 到 8,然后找到 9 的 sqrt。
我想创建一个 mycompose 函数,它首先应用第一个发送函数,然后是第二个、第三个等。因此,在上面的示例中,需要先应用 sqrt,然后再应用 add1。我可以管理以下内容:
(define (mycompose L arg)
(let loop ((L L)
(res arg))
(cond
[(empty? L) res]
[else (loop (rest L) ((car L) res))])))
(mycompose (list sqrt add1) 8)
我相信有更好的方法。特别是,上面可以使用宏来实现,并且还允许将多个参数依次发送到每个函数吗?
【问题讨论】:
-
您可以将您的函数实现为
(define (mycompose . fs) (apply compose (reverse fs)),这样就可以满足您的所有要求,而无需成为宏。 -
我知道有更好的方法。谢谢。