首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将函数定义为参数,并在球拍中传递数字

将函数定义为参数,并在球拍中传递数字
EN

Stack Overflow用户
提问于 2016-07-07 12:38:09
回答 2查看 3.6K关注 0票数 3

我尝试将一个函数定义为参数,然后将一个数字传递给该函数。它应该看起来像这样:

代码语言:javascript
运行
复制
> (function-3 sqrt)

1.7320508075688772

我正在考虑将function-3定义为等于3,但它似乎不起作用……这就是我到目前为止所知道的:

代码语言:javascript
运行
复制
(define function-3
   (λ (x)
     (3)))

我不知道我的想法是否正确,如果有人能给我指出正确的方向,那就太好了。谢谢

EN

回答 2

Stack Overflow用户

发布于 2016-07-07 13:13:44

接近了-您只需要将function-3的参数应用于数字3,如下所示:

代码语言:javascript
运行
复制
(define function-3
  (λ (x)
    (x 3)))

更有意义的是,使用速记函数语法,它可能会写成这样:

代码语言:javascript
运行
复制
(define (function-3 f)
  (f 3))

(当值为函数时,通常使用名称f而不是x。)

但是为什么呢?

球拍中的函数(就像它的父语言Scheme一样)只是普通的值。在所有的括号后面,函数应用的语法实际上非常简单。以下是一个示例方案表达式:

代码语言:javascript
运行
复制
                 (f a b c)
                  ^ ^^^^^
                  |   |
function expression   argument expressions

请注意,这两个角色都是一个表达式。显然,参数可以是表达式,而不仅仅是变量,因为您可以这样做:

代码语言:javascript
运行
复制
> (+ 1 (* 2 3))
7

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

代码语言:javascript
运行
复制
> ((λ (x) (* x 2)) 3)
6

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

票数 9
EN

Stack Overflow用户

发布于 2016-07-07 13:12:12

你就差一步了!

代码语言:javascript
运行
复制
(define function-3
  (lambda (x)
    (x 3)))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38237612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档