关于定义语法的问题

发布于 2024-08-13 11:14:43 字数 330 浏览 1 评论 0原文

我是编程新手,正在学习 SICP,并且很喜欢它。虽然我对方案的定义语法有点困惑,主要是:

(define foo bar)

和:

(define (foo) bar)

第一个只是将 bar 分配给 foo 并执行它?当第二个分配并等待调用时?

如果是这样,您将如何在另一个函数中调用该函数,例如在 if 语句中,

(if (foo) ...)

或者

(if foo ...)

I'm new to programming, working my way through SICP, and loving it. Though I'm a bit confused about scheme's define syntax, mainly, what's the difference between:

(define foo bar)

and:

(define (foo) bar)

Is the first one just assigns bar to foo and execute it? While the second assigns and waits for the call?

if so how would you go about calling the function inside another function, say within an if statement,

(if (foo) ...)

or

(if foo ...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

兰花执着 2024-08-20 11:14:43

第一个版本创建一个名为 foo 的变量并为其分配对 bar 的引用。其他什么都不会被执行。

第二个版本创建了带有主体栏的功能。该函数不会被执行,它会被归档(猜猜这就是你所说的“等待”的意思?)。

您始终通过将函数设为列表中的第一项并评估该列表来调用该函数。

创建一个变量

> (define a 1)
> a
1

创建另一个引用另一个变量

> (define b a)
> b
1

的变量 创建一个返回 a 中任何内容的函数 评估

> (define (c) a)
> c
#<procedure:c>

该函数

> (c)
1

编写一个评估另一个函数并返回结果的函数

> (define (d) (if (odd? a) (c) 0))
> (d)
1

现在将其更改为返回函数 c

> (define (d) (if (odd? a) c 0))
> (d)
#<procedure:c>

The first version creates a variable named foo and assigns it a reference to bar. Nothing else gets executed.

The second version creates a function with the body bar. The function doesn't get executed, it gets filed away (guessing that's what you mean by 'waiting'?).

You always call a function by making it the first item in a list and evaluating the list.

create a variable

> (define a 1)
> a
1

create another variable referencing the other variable

> (define b a)
> b
1

create a function that returns whatever is in a

> (define (c) a)
> c
#<procedure:c>

evaluate the function

> (c)
1

write a function that evaluates another function and returns the result

> (define (d) (if (odd? a) (c) 0))
> (d)
1

now change it to return the function c

> (define (d) (if (odd? a) c 0))
> (d)
#<procedure:c>
山有枢 2024-08-20 11:14:43

它的第二个版本创建了一个函数(没有参数),它相当于

(define foo (lambda () bar))

要调用它,它将是 (foo)

The second version of that creates a function (with no parameters), it's equivalent to

(define foo (lambda () bar))

To call it, it would be (foo)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文