将函数定义为参数并在Racket中传递数字

时间:2016-07-07 04:38:09

标签: racket

我正在尝试将函数定义为参数,然后将数字传递给该函数。它应该是这样的:

> (function-3 sqrt)

1.7320508075688772

我在考虑将函数-3定义为等于3但看起来它不起作用......这就是我到目前为止所做的:

(define function-3
   (λ (x)
     (3)))

我不知道我是否正在思考正确的道路......但如果有人可以指出我正确的方向,那就太好了。感谢

2 个答案:

答案 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)))