Итак, у меня есть небольшая проблема.
Я пытаюсь запрограммировать это здесь:
Что с лямбда-исчислением упрощается до 12.
У меня есть следующий скрипт Scheme:
(
define double (
lambda x (
+ (car x) (car x)
)
)
)
(display 'Debug)
(newline)
(display (double 6))
(newline)
(
define getTwelve (
((
(lambda x (
lambda y (
(display y)
(newline)
(x (x y))
)
))
double
) 3)
)
)
(display getTwelve)
(newline)
(newline)
Что соответствует выходу этого терминала:
Debug
12
(3)
application: not a procedure;
expected a procedure that can be applied to arguments
given: '(#<procedure:double>)
arguments...:
'(3)
Так что, конечно, я подумал: «Это потому, что параметр double - это список, а не число», но car y
просто меняет последнюю строку вывода терминала на 3
.
Я думаю, что неправильно интерпретирую вывод терминала Racket
, но я не знаю, каким образом. Однако существует другая возможность, что передача функции lambda
в функцию lambda
в качестве параметра недопустима.
Итак, мой вопрос: какой это?