我目前正在尝试制作具有以下签名的功能:
(define (point-app F x))
哪个计算F(x)。我的目标是能够使用x作为参数来评估函数F。
所以,如果我有:
(point-app '(+(* x x) 4) 2)
<==> F(2)=(2 ^ 2)+4预期输出为8。
我试过使用eval,方法是遵循drracket的docs:
(define (point-fixe f x)
(eval `(let ([number x]),f)))
但是我不能将变量x附加到数字上。据我所知,是因为eval动态加载表达式吗?我搜索了通用线程,但没有找到任何对我有帮助的东西。任何帮助将不胜感激。
您在lambda演算中表示函数的方式是λx.e,其中e是可能涉及x的某种表达式。直接将其转换为(λ (x) e)
的拍子,其中e还是某个表达式。
所以您的函数只需要在其第二个参数上调用它的第一个参数,即一个函数:
(define (point-app F x)
(F x))
如果要以文字数据(例如列表)表示功能,则可以使用eval
将其转换为功能:
(define (source->function function-form)
(eval function-form))
所以现在:
> (point-app (source->function '(λ (x) (+ (* x x) 4))) 2)
8
如果您不想使用语言的基本机制,则需要编写一个评估程序。这不是很难,我敢肯定有很多例子。