【发布时间】:2020-07-28 15:38:49
【问题描述】:
我目前正在尝试创建一个具有以下签名的函数:
(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 动态加载表达式?我已经搜索了常见的线程,但没有找到任何对我有帮助的东西。任何帮助将不胜感激。
【问题讨论】:
-
你可以写成
(point-app (lambda (x) (+ (* x x) 4)) 2)吗?还是必须是引用列表?如果是后者,而你有(point-app '(list x y) 2),你怎么知道'x或'y中的哪一个用给定的参数值替换,即哪个用作参数占位符,哪个用作引用基准?即返回'(2 y)还是'(x 2)? -
假设第一个参数是F,第二个参数是x。我正在实现的函数是定点逼近,即 F(x) = x (不会有变量 y)。我试图避免在函数调用中使用 lambda,因为我希望它通过添加更干净
'(expression)(更难的表达式 --> 更多时间考虑 lambda func) -
坚持使用 lambda,如果你有任何选择的话。否则你将不得不编写自己的评估器。这也很有趣,但没必要。
-
我已经考虑过了,遍历表达式,将所有
x替换为一个数字,然后对那个新表达式运行 eval 不是很好吗?
标签: functional-programming scheme lisp racket evaluation