Functional programming 如何使用给定的参数计算表达式?

Functional programming 如何使用给定的参数计算表达式?,functional-programming,scheme,lisp,racket,evaluation,Functional Programming,Scheme,Lisp,Racket,Evaluation,我目前正在尝试创建具有以下签名的函数: (定义(点应用F x)) 它计算F(x)。我的目标是能够用x作为参数计算函数F 因此,如果我有: (点应用程序“(+(*x)4)2)F(2)=(2^2)+4 预期产出为8 我尝试过使用eval,方法是遵循drracket的: 但我不能将变量x附加到数字上。据我所知,这是因为eval动态加载表达式?我搜索了一些常见的线索,但没有找到任何对我有帮助的。任何帮助都将不胜感激。在lambda演算中表示函数的方式是λx.e,其中e是一些可能涉及x的表达式。这直接转化

我目前正在尝试创建具有以下签名的函数:

(定义(点应用F x))

它计算F(x)。我的目标是能够用x作为参数计算函数F

因此,如果我有:

(点应用程序“(+(*x)4)2)
F(2)=(2^2)+4 预期产出为8

我尝试过使用eval,方法是遵循drracket的:


但我不能将变量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

如果您不想使用该语言的底层机制,那么您需要编写一个计算器。这并不难,我相信有很多例子。

在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

如果您不想使用该语言的底层机制,那么您需要编写一个计算器。这不是很难,我相信有很多例子。

你可以把它写成
(point app(lambda(x)(+(*x)4))2)
?或者这必须是一份报价单?如果是后者,并且您有
(point app'(list x y)2)
,您如何知道要用给定参数值替换
'x
'y
中的哪一个,即使用哪一个作为参数占位符,以及保留哪一个作为引用数据?i、 e.是否返回
'(2y)
'(x2)
?假设第一个参数为F,第二个参数为x。我正在实现的函数是固定点近似,即F(x)=x(将没有变量y)。我试图避免在函数调用中使用lambda,因为我希望通过添加
'(表达式)
(更难的表达式-->更多时间来考虑lambda func)使其更干净,如果你有选择的话。否则,您将不得不编写自己的评估程序。这也很有趣,但不必要。我已经考虑过了,在表达式中迭代,用一个数字替换所有的
x
,然后在新表达式上运行eval,这不是很好吗?您是否可以将其写成
(point app(lambda(x)(+(*x)4))2
?或者这必须是一份报价单?如果是后者,并且您有
(point app'(list x y)2)
,您如何知道要用给定参数值替换
'x
'y
中的哪一个,即使用哪一个作为参数占位符,以及保留哪一个作为引用数据?i、 e.是否返回
'(2y)
'(x2)
?假设第一个参数为F,第二个参数为x。我正在实现的函数是固定点近似,即F(x)=x(将没有变量y)。我试图避免在函数调用中使用lambda,因为我希望通过添加
'(表达式)
(更难的表达式-->更多时间来考虑lambda func)使其更干净,如果你有选择的话。否则,您将不得不编写自己的评估程序。这也很有趣,但不必要。我已经考虑过了,对表达式进行迭代,用一个数字替换所有的
x
,然后对新表达式运行eval不是很好吗?