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

tad*_*shi 2 racket

我正在尝试将函数定义为参数,然后将数字传递给该函数.它应该如下所示:

> (function-3 sqrt)

1.7320508075688772
Run Code Online (Sandbox Code Playgroud)

我只是想把函数-3定义为等于3,但它似乎不起作用......这就是我到目前为止所做的:

(define function-3
   (? (x)
     (3)))
Run Code Online (Sandbox Code Playgroud)

我不知道我是否正在思考正确的道路......但如果有人能够指出我正确的方向,那就太棒了.谢谢

Ale*_*ing 8

你很接近 - 你只想将参数应用于function-3数字3,如下所示:

(define function-3
  (? (x)
    (x 3)))
Run Code Online (Sandbox Code Playgroud)

更惯用的是,使用速记函数语法,它可能会像这样写:

(define (function-3 f)
  (f 3))
Run Code Online (Sandbox Code Playgroud)

(f通常使用名称而不是x值是函数.)


但为什么?

Racket中的函数(如其母语Scheme所示)只是普通值.在所有括号后面,函数应用程序的语法实际上非常简单.这是一个示例方案表达式:

                 (f a b c)
                  ^ ^^^^^
                  |   |
function expression   argument expressions
Run Code Online (Sandbox Code Playgroud)

请注意,这两个角色中的每一个都是一个表达式.显然,参数可以是表达式,而不仅仅是变量,因为你可以做这样的事情:

> (+ 1 (* 2 3))
7
Run Code Online (Sandbox Code Playgroud)

值得注意的是,函数本身也可以表达.您可以拥有一个生成函数的表单,该表达式可以在函数调用中使用:

> ((? (x) (* x 2)) 3)
6
Run Code Online (Sandbox Code Playgroud)

因此,当您调用时(function-3 sqrt),sqrt函数本身会传递给函数并绑定到函数实现的第一个参数.因此,您需要做的就是将该参数放在函数表达式位置,并且它将像任何其他函数一样被调用.


Chr*_*ung 5

你太接近了!

(define function-3
  (lambda (x)
    (x 3)))
Run Code Online (Sandbox Code Playgroud)