if 和 cond 有什么区别?
What is the difference between if and cond?
可能是我理解错了
在Hy中,if*
可以取(在if*
符号之后)
- 一个谓词(如果没有进一步的表达式则返回计算)
- 0 或 1 consequent(如果谓词为 truthy,则计算并返回)
- (如果结果存在)零或一个 alternative(如果谓词是 falsy 则计算并返回)
如果谓词为假且未提供替代表达式,则返回 None。
if
(没有星号)可以处理任意数量的谓词和结果对,如果没有谓词求值为真,则评估并返回最终的可选非谓词表达式。
这与 cond
有何不同,除了 cond
需要用括号括住谓词-结果对?
更新
截至 #2240(2022 年 3 月 2 日合并),if
和 cond
与以前有些不同,并且更好地区分彼此。 if
恰好需要三个参数:
(if condition-form
then-form
else-form)
cond
接受任意偶数个参数,不需要括号或提供隐式 do
s:
(cond
condition1 then1
condition2 then2
condition3 then3)
if*
已删除。
原回答
cond
中的方括号提供了隐含的 do
。而已。我通常只对两个分支的情况使用 if
,对其他所有情况使用 cond
。 if*
的存在实际上只是一个实现细节。
可能是我理解错了
在Hy中,if*
可以取(在if*
符号之后)
- 一个谓词(如果没有进一步的表达式则返回计算)
- 0 或 1 consequent(如果谓词为 truthy,则计算并返回)
- (如果结果存在)零或一个 alternative(如果谓词是 falsy 则计算并返回)
如果谓词为假且未提供替代表达式,则返回 None。
if
(没有星号)可以处理任意数量的谓词和结果对,如果没有谓词求值为真,则评估并返回最终的可选非谓词表达式。
这与 cond
有何不同,除了 cond
需要用括号括住谓词-结果对?
更新
截至 #2240(2022 年 3 月 2 日合并),if
和 cond
与以前有些不同,并且更好地区分彼此。 if
恰好需要三个参数:
(if condition-form
then-form
else-form)
cond
接受任意偶数个参数,不需要括号或提供隐式 do
s:
(cond
condition1 then1
condition2 then2
condition3 then3)
if*
已删除。
原回答
cond
中的方括号提供了隐含的 do
。而已。我通常只对两个分支的情况使用 if
,对其他所有情况使用 cond
。 if*
的存在实际上只是一个实现细节。