Итак, ваша версия карри принимает функцию с двумя аргументами, скажем:
(define (cons a b) ...)
и превращает это в нечто, что вы можете назвать так:
(define my-cons (curry cons))
((my-cons 'a) '(b c)) ; => (cons 'a '(b c)) => '(a b c)
У вас действительно естьфункция, которая принимает три аргумента.Если у вас был curry3
, который управлял 3-мя функциями, вы могли бы сделать что-то вроде:
(define (consElem2All0 the-conser x lst) ...)
(как вы сделали, но позволяя использовать функции, похожие на минусы, отличные от минусов!)
и затем сделайте это:
(define consElem2All (curry3 consElem2All0))
У вас нет такого curry3
под рукой.Таким образом, вы можете либо создать его, либо обойти его, «вручную» каррируя дополнительную переменную самостоятельно.Работа вокруг выглядит примерно так:
(define (consElem2All0 the-conser)
(lambda (x lst) ...something using the-conser...))
(define (consElem2All the-conser)
(curry (consElem2All0 the-conser)))
Обратите внимание, что есть еще одно возможное использование карри в самом выражении карты, подразумеваемое тем, что вы оборачиваете лямбду вокруг cons, чтобы передать элемент в cons.Как вы могли бы вставить x
в cons
, чтобы получить функцию с одним аргументом, которую можно использовать непосредственно для отображения? ...