Хм, эта проблема сформулирована довольно запутанно, по сравнению с обычно более ясным стилем книг. На самом деле, похоже, что вы, возможно, неправильно цитируете набор проблем, если вы получаете набор проблем из здесь ; это может способствовать вашей путанице.
Я приведу вам определение с некоторыми примерами, которые могут помочь вам понять, что происходит.
Применение выражения E - это выражение формы (E E1 ... En).
Вот пример приложения:
(foo 1 2) ; This is an application of foo
(bar 1) ; This is an application of bar
Сюда входит случай n = 0, соответствующий выражению (E).
(baz) ; This is an application of baz
Приложение Curried E - это приложение E или приложение Curried E & # 56319; ...........
Это тот, кого вы неверно процитировали; выше - определение из набора проблем, которое я нашел в сети.
Есть две половины этого определения. Начиная с первого:
Применение карри E - это либо применение E
(foo 1 2) ; (1) A Curried application of foo, since it is an application of foo
(bar 1) ; (2) A Curried application of bar, since it is an application of bar
(baz) ; (3) A Curried application of baz, since it is an application of baz
или приложение карри приложения E
((foo 1 2) 3) ; (4) A Curried application of foo, since it is an application of (1)
((bar 1)) ; (5) A Curried application of bar, since it is an application of (2)
((baz) 1 2) ; (6) A Curried application of baz, since it is an application of (3)
(((foo 1 2) 3)) ; A Curried application of foo, since it is an application of (4)
(((bar 1)) 2) ; A Curried application of bar, since it is an application of (5)
; etc...
Это дает вам помощь, необходимую для начала работы?
edit : Да, (foo1 (sqrt 3))
является приложением Curried foo1
; это так просто. Это не очень хороший вопрос, так как во многих реализациях вы получите 2.9999999999999996 или что-то в этом роде; невозможно иметь значение, которое будет возвращать ровно 3, если ваша схема не имеет своего рода представление точных алгебраических чисел .
Ваш второй пример действительно является ошибкой. foo1
возвращает целое число, которое недопустимо для применения. Это только некоторые из более поздних примеров, для которых допустим рекурсивный случай применения функции. Взгляните, например, на foo3
.
edit 2 : Я только что зарегистрировался в SICP, и похоже, что понятия здесь не объясняются до раздела 1.3, в то время как это назначение упоминает только раздел 1.1. Я бы порекомендовал попробовать прочитать раздел 1.3, если вы еще этого не сделали.