我正在尝试将函数定义为参数,然后将数字传递给该函数。它应该是这样的:
> (function-3 sqrt)
1.7320508075688772
我在考虑将函数-3定义为等于3但看起来它不起作用......这就是我到目前为止所做的:
(define function-3
(λ (x)
(3)))
我不知道我是否正在思考正确的道路......但如果有人可以指出我正确的方向,那就太好了。感谢
答案 0 :(得分:8)
你很接近 - 你只想将function-3
的参数应用于数字3
,如下所示:
(define function-3
(λ (x)
(x 3)))
更惯用的是,使用简写函数语法,可能会这样写:
(define (function-3 f)
(f 3))
(当值为函数时,经常使用名称f
代替x
。)
Racket中的函数(与其母语Scheme一样)只是普通值。在所有括号后面,函数应用程序的语法实际上非常简单。这是一个示例方案表达式:
(f a b c)
^ ^^^^^
| |
function expression argument expressions
请注意,这两个角色中的每一个都是一个表达式。显然,参数可以是表达式,而不仅仅是变量,因为你可以做这样的事情:
> (+ 1 (* 2 3))
7
值得注意的是,功能本身也可以是表达式。您可以拥有一个生成函数的表单,该表达式可以在函数调用中使用:
> ((λ (x) (* x 2)) 3)
6
因此,当您调用(function-3 sqrt)
时,sqrt
函数本身会传递给函数并绑定到函数实现的第一个参数。因此,您需要做的就是将该参数放在函数表达式的位置,并且它将像任何其他函数一样被调用。
答案 1 :(得分:3)
你真是太近了!
(define function-3
(lambda (x)
(x 3)))