我在如何用方案语言定义无操作方面遇到一些麻烦
喜欢;在c我想做这样的事情:
(cond
[(null? exp) nop ]
.....
)
如果我把它留空,它将返回#t 谢谢!
答案 0 :(得分:2)
请注意,功能程序与命令式程序不同。你应该总是在每个表达式/函数中思考返回一些东西(表达式的结果或值)。对于条件语,你必须小心地通过所有不同的分支来维护这个“某事”,因为你的表达式在任何情况下都必须产生一个值。
然后,在这种情况下,您必须决定要返回的内容,并相应地构建代码。如果您不想返回#t
,则只能返回#f
或空列表:
(cond
[(null? exp) #f]
.....
)
事实上,如果你仔细思考,C中的“不操作”(即无所作为)的概念几乎与“产生某种价值”相同,因为除了生产之外你什么都不做价值,在你的程序中根本不会引起任何变化。
答案 1 :(得分:1)
Scheme没有语句,只有表达式。每个表达式返回一个值 - 或者可能永远不会返回 -
所以你想要一个计算量不大的表达式。您可以使用 nil (或#f
或任何其他值)来实现此目的:
(cond
((null? exp) ())
....
)
如果你写了一个只有一个测试的条件 - 而且没有"那么"身体子表达式
(cond
((null? exp))
)
然后当cond
为零时exp
的结果是(null? exp)
测试#t
的结果
实际上,当exp
为空时,您可以返回exp
本身。
答案 2 :(得分:0)
您应该更改您的程序以消除无用的条件。但是如果你只需要一个零值,那么标准答案就是说(if #f #f)
,如果它总是假的但是没有虚假的表达,那就是单腿的,因此什么也不返回。