当前位置:  开发笔记 > 编程语言 > 正文

Clojure(或Lisp)等效的复合布尔测试

如何解决《Clojure(或Lisp)等效的复合布尔测试》经验,为你挑选了3个好方法。

在C++中我会写这样的东西:

if (a == something && b == anotherthing)
{
   foo();
}

我认为Clojure等价物是这样的:

(if (= a something)
    (if (= b anotherthing)
        (foo)))

或者是否有另一种方法来执行我错过的逻辑"和"?正如我所说,后一种形式似乎工作正常 - 我只是想知道是否有一些更简单的方法来执行逻辑和.在Clojure Google Group上搜索"boolean""logical"和"and"会产生太多结果,但却没有多大用处.



1> Doug Currie..:

在Common Lisp和Scheme中

(and (= a something) (= b another) (foo))



2> David Lichte..:

在Common Lisp中,以下也是一个常见的习语:

(when (and (= a something) (= b another))
  (foo))

将此与Doug Currie的答案相比较(and ... (foo)).语义是相同的,但根据返回类型(foo),大多数Common Lisp程序员更喜欢一个:

(and ... (foo))(foo)返回布尔值的情况下使用.

使用(when (and ...) (foo))在情况下(foo)返回任意结果.

证明规则的例外是程序员知道这两个习语的代码,但(and ... (foo))无论如何都是有意写的.:-)



3> mikera..:

在Clojure中,我通常会使用以下内容:

(if 
  (and (= a something) (= b anotherthing))
  (foo))

显然可能更简洁(例如Doug的答案),但我认为这种方法对于人们来说更自然 - 尤其是如果未来的代码读者具有C++或Java背景!

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有