【发布时间】:2021-06-18 22:21:49
【问题描述】:
我有以下过程来添加三个数字:
(define add-3 (lambda (x y z) (+ x y z)))
(add-3 100 200 300)
; 600
将其转换为柯里化函数时,它会简化为以下内容,
(apply (lambda args1
(apply add-3 (cons 100 args1)))
'(200 300))
; 600
我的问题是上述如何进一步减少?例如,如果我在列表中替换 args1=(200 300) 我会得到以下信息:
(apply (lambda args1
(apply add-3 (cons 100 args1)))
'(200 300))
(apply
(apply add-3 (cons 100 '(200 300))))
但这给了我arity mismatch,所以我在减少/替换中一定做错了什么。这样做的正确方法是什么?
我想一个更直接的方式来问这个问题是如何进行以下简化?
(apply (lambda args (apply add-3 args)) '(100 200 300))
; 600
; ... how do we get here?
(apply add-3 '(100 200 300))
; 600
【问题讨论】:
-
减少与链接答案中的完全相同 - 从
(apply (lambda args1 (apply add-3 ...))到(apply add-3 (cons 100 '(200 300)))。您似乎从(apply fn ls)转到(apply (fn ls)),但这是不正确的。 -
@molbdnilo 谢谢,我在这里的回答有意义吗?我花了一些时间浏览它...stackoverflow.com/a/68075322/651174
标签: scheme lisp racket apply currying