booth 的中文解释是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了booth 的中文解释是啥?相关的知识,希望对你有一定的参考价值。
booth中文\英文翻译: booth
1. (有篷的)货摊
I had a pepsi at a refreshment booth round the corner.
我在转角处的餐饮摊喝了一杯百事可乐。
2. 【美】公用电话亭;岗亭
He went into the phone booth and dialed the number.
他走进电话亭拨了号码。
3. 投票站
4. (隔开的)小房间;(餐厅等的)雅座 参考技术A booth
KK: []
DJ: []
n.[C]
1. (有篷的)货摊
I had a pepsi at a refreshment booth round the corner.
我在转角处的餐饮摊喝了一杯百事可乐。
2. 【美】公用电话亭;岗亭
He went into the phone booth and dialed the number.
他走进电话亭拨了号码。
3. 投票站
4. (隔开的)小房间;(餐厅等的)雅座 参考技术B 词性及解释
n. 亭, 摊棚
【经】 货摊, 电话间
例句
A voting booth; a projection booth.
投票站;放映间
An unoccupied telephone booth.
一个空的电话亭
At the ticket booth, please.
公园售票处好了。
I take down the booth.
拆除摊位。
Sidewalk snack booth; large stall
大排档 参考技术C booth [buːð]
n. 货摊; 岗亭; 公用电话亭; 投 参考技术D 二者都,必须是两个。
三个的话用all本回答被提问者采纳
SICP中练习1.6的解释是啥?
【中文标题】SICP中练习1.6的解释是啥?【英文标题】:What's the explanation for Exercise 1.6 in SICP?SICP中练习1.6的解释是什么? 【发布时间】:2010-11-13 08:43:13 【问题描述】:我刚刚开始学习 SICP(我自己;这不是为了上课),我已经在练习 1.6 上苦苦挣扎了几天,我似乎无法理解出去。这是 Alyssa 根据 cond
重新定义 if
的地方,如下所示:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
她在一些简单的情况下成功地测试了它,然后用它重新编写了平方根程序(与if
配合得很好):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
然后问题问:“当 Alyssa 尝试使用它来计算平方根时会发生什么?解释一下。” [如有必要,我很乐意重现其他程序(good-enough?
、improve
等),请告诉我。]
现在,我知道会发生什么:它从不返回值,这意味着程序无限递归。我只是无法解释为什么会发生这种情况。 if
和 new-if
之间存在的任何细微差别都让我无法理解。非常感谢任何和所有帮助。
【问题讨论】:
“recursive”的动词形式是“to recurse”,所以是“recurses”。 也与 4.25 比较:community.schemewiki.org/?sicp-ex-4.25 【参考方案1】:以前的答案很棒。我将添加另一个更详尽的解释。
考虑这种差异的另一种方式是:使用if
的递归如何在某个点停止而使用new-if
的递归永远循环?
首先让我们看看这两个 if 的一般工作原理,然后看看它们在这种情况下是如何工作的。
if
这是@alex-vasi解释的:
要计算 if 表达式,解释器首先计算表达式的
<predicate>
部分。如果<predicate>
评估为真值,则解释器评估<consequent>
并返回其值。否则,它会评估<alternative>
并返回其值。
new-if
这是@Schmudde解释的:
在调用过程之前对所有参数进行全面评估。
使用if
的递归如何在某个点停止?
它停止了,因为在 guess
足够好的时候(即(good-enough? guess x)
是true
),我们将拥有:
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
由于predicate
现在是true
,解释器将评估consequent
(即guess
),返回它的值并且将不再评估alternative
(即(sqrt-iter (improve guess x) x)
)。
所以if
实际上递归地评估(sqrt-iter (improve guess x) x)
直到guess
足够好。然后它停止递归。
使用new-if
的递归如何永远循环?
与 if
一样,new-if
(sqrt-iter (improve guess x) x)
将被递归评估,直到 guess
足够好。
但它会一次又一次地评估(sqrt-iter (improve guess x) x)
。为什么?因为在评估时:
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
由于new-if
是一个过程,它不会检查(good-enough? guess x)
是否为真,以决定评估guess
或(sqrt-iter (improve guess x))
。它将评估(good-enough? guess x)
、guess
和(sqrt-iter (improve guess x))
,因为这些是过程的参数。因此,即使guess
足够好,它也会继续递归调用(sqrt-iter (improve guess x))
:/。
【讨论】:
这就像答案的第二部分。谢谢!【参考方案2】:在 Scheme 中可以通过三种方式评估表单:
-
申请订单
评估参数,然后应用
给定
f(x)=x+x
: 3*f(1)*f(1)
⇒ 3*2*2
正常顺序
完全展开然后缩小
给定f(x)=x+x
: 3*f(1)*f(1)
⇒ 3*(1+1)*(1+1)
(也用于“惰性求值”)
特殊形式 例如:
布尔值and
和or
。例如:(and <e1> ... <en>)
计算 Left → Right。如果任何计算结果为假,则 and 表达式的值为假,并且不计算 <e>
的其余部分。
if
和 cond
等条件
(if <predicate> <consequent> <alternative>)
:如果<predicate>
计算为真值,则解释器计算<consequent>
并返回其值。否则,它会评估 <alternative>
并返回其值
(cond (<p1> <e1>) ... (<pn> <en>))
:首先评估谓词<p1>
。如果其值为 false,则评估 <pn>
。如果<pn>
的值也为假,则评估<pn+1>
。当谓词为真时,解释器返回相应的结果表达式<e>
的值。
以练习 1.6 为例:
new-if
是正常程序。在 Scheme(和许多其他语言)中,参数在调用过程之前完全评估。这称为申请订单。 ∴ 每次调用new-if
时都会调用sqrt-iter
,导致无限循环。
为了读者的启迪,普通的if
s 是一个特殊形式。除非调用 <alternative>
,否则不会评估递归语句。
【讨论】:
【参考方案3】:首先,您必须在应用订单评估和正常订单之间understand the difference。 Lisp 使用应用顺序,但条件表达式的计算方式不像普通函数 (sicp chapter 1.1.6):
(if <predicate> <consequent> <alternative>)
要计算 if 表达式,解释器首先计算表达式的
<predicate>
部分。如果<predicate>
评估为真值,则解释器评估<consequent>
并返回其值。否则,它会评估<alternative>
并返回其值。
【讨论】:
感谢您提供图书参考链接。链接已损坏,但这应该可以工作mitpress.mit.edu/sites/default/files/sicp/full-text/book/…【参考方案4】:Ex1.6。新的如果:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
与“if 语句”的区别: if 语句从谓词 -> 后件 -> 替代,
逐一评估然而,'new-if' 必须评估所有参数,也就是 MOMENT 它调用的参数(这意味着'else-clause' 在开始时被评估!!),
因此,当这些参数中的任何一个将自己调用到迭代循环中时,这会导致无限循环
【讨论】:
【参考方案5】:new-if
是一个过程,Scheme使用applicative-order评估(1.1.5),所以在new-if
实际执行之前,它必须先评估所有参数,即guess
和@987654324 @。可以看到后面的参数是一个递归,它调用了一个新的new-if
过程,就是这样无限循环发生的。
普通的if
不需要先评估它的参数,顺其自然,这就是if
和new-if
的区别。 :)
【讨论】:
new-if
过程具有三个参数:predicate
、then-clause
和 else-clause
。因此,当调用 new-if
时,会评估 (good-enough? guess x)
、guess
和 (sqrt-iter (improve guess x))
。那正确吗 ?这不会改变结果,因为只有sqrt-iter
的评估会导致麻烦。但是imo你忘记了一个论点......【参考方案6】:
new-if
是一个函数。当一个函数被调用时,Scheme 对参数列表做的第一件事是什么?它评估所有个参数。
【讨论】:
OP 在 Haskell 中不会有这个问题! (他会有一大堆其他问题......) 真正烤我的面条的是意识到行为的改变与从if
切换到cond
无关以上是关于booth 的中文解释是啥?的主要内容,如果未能解决你的问题,请参考以下文章