gpt4 book ai didi

scheme - Racket 开始形式

转载 作者:行者123 更新时间:2023-12-03 19:20:38 24 4
gpt4 key购买 nike

(define mystery2 
(lambda (L)
(if (null? L)
L
(begin
(displayln L)
(append (mystery2 (cdr L))
(list (car L)))))))

我通过 (mystery2 '((1 2) (3 4) 5 6)) 运行它

在这里,我不确定“开始”函数的作用。

另外,当我写“displayln L”时,它只会给我们 ((1 2) (3 4) 5 6)) . 因为它是递归,所以不应该打印出递减的值吗?

请帮助我理解为什么这里使用“开始”并且 displayln 是这样工作的。

代码本身没有问题。

最佳答案

begin使用表单是因为 if每个分支中只允许 1 个表达式。

一个更直观的例子可能是调试。假设您正在编写复杂的代码,并且想要查看执行了哪个分支。

原始代码:

(if (true? some-value)
(dostuff)
(dostuff2))

但是您不确定正在执行哪个分支,因此您可能希望在执行任一分支时打印一条消息。但是由于 Scheme 只允许在每个分支中使用单个表达式,因此您不能将它们放在那里。你必须用一个表达式将它们粘在一起,用 begin .
(if (true? some-value)
(begin
(display "some-value was true")
(dostuff))
(begin
(display "some-value was false")
(dostuff2)))

Begin 接受任意数量的表达式并执行它们中的每一个,但只返回正文中最后一个表达式的结果。

关于scheme - Racket 开始形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29382733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com