没有方案语言的操作

时间:2014-04-14 12:15:03

标签: functional-programming scheme conditional-statements

我在如何用方案语言定义无操作方面遇到一些麻烦

喜欢;在c

我想做这样的事情:

   (cond
   [(null? exp)  nop ]
    .....
   )

如果我把它留空,它将返回#t 谢谢!

3 个答案:

答案 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),如果它总是假的但是没有虚假的表达,那就是单腿的,因此什么也不返回。