Num的速记评估>;=低数值和<;高数值Clojure

Num的速记评估>;=低数值和<;高数值Clojure,clojure,clojurescript,Clojure,Clojurescript,我偶然发现了这篇关于Clojure中使用比较器操作对语句进行速记评估的文章 所以,这对我来说很有意义: (<= 4 7 7) =>true (正确 这是有道理的: (< 4 7 7) =>false (错误 但是,如果中间数大于或等于到4,小于7,那么如果我需要该语句计算为true,该怎么办?是否有一种简捷的方法来做到这一点,并避免执行以下操作: (and (< 7 7) (>= 7 4)) (和(=74)) 这个没有内置的速记,但是 大于

我偶然发现了这篇关于Clojure中使用比较器操作对语句进行速记评估的文章

所以,这对我来说很有意义:

(<= 4 7 7)
=>true
(正确
这是有道理的:

(< 4 7 7)
    =>false
(<47)
=>错误
但是,如果中间数大于或等于到4,小于7,那么如果我需要该语句计算为true,该怎么办?是否有一种简捷的方法来做到这一点,并避免执行以下操作:

(and (< 7 7) (>= 7 4))
(和(<77)(>=74))

这个没有内置的速记,但是

大于或等于4,但小于7


也可以编写为
(半开间隔非常常见。如果需要经常使用它们,可能需要编写一个函数:

(defn <=< [a b c]
  (and (<= a b) (< b c)))

(defn谢谢你提供的信息。我将使用我以前拥有的。我会使用你提到的示例,但在我设想的场景中,像3.5这样的浮动应该会使声明为假,而6.5则为真。你的命名很奇怪:你如何区分
aI将其命名
@erdos:我相信@coredump:我会将其作为一个函数,不是宏。@Svante您是对的,我看到了“and”,并希望保留“shortcut”求值,但其他关系运算符不是这样工作的。
(defmacro <=< [a b c]
  `(let [b# ~b] (and (<= ~a b#) (< b# ~c))))