То, как вы express функция в лямбда-исчислении, равно λx.e , где e - какое-то выражение, вероятно, включающее x . Это переводится непосредственно в Racket как (λ (x) e)
, где снова e является некоторым выражением.
Таким образом, вашей функции просто нужно вызвать свой первый аргумент, функцию, во втором, некоторое значение:
(define (point-app F x)
(F x))
Если вы хотите express свои функции в качестве литеральных данных (скажем, списков), то вы можете использовать eval
, чтобы превратить их в функции:
(define (source->function function-form)
(eval function-form))
Так что теперь :
> (point-app (source->function '(λ (x) (+ (* x x) 4))) 2)
8
Если вы не хотите использовать базовый механизм языка, вам нужно написать оценщик. Это не очень сложно, и я уверен, что есть много примеров.