我如何用给定的参数求值表达式?

问题描述 投票:0回答:1

我目前正在尝试制作具有以下签名的功能:

(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动态加载表达式吗?我搜索了通用线程,但没有找到任何对我有帮助的东西。任何帮助将不胜感激。

functional-programming scheme lisp racket evaluation
1个回答
2
投票

您在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

如果您不想使用语言的基本机制,则需要编写一个评估程序。这不是很难,我敢肯定有很多例子。

© www.soinside.com 2019 - 2024. All rights reserved.