If statement Clojure seq?使用if测试未在功能中工作

If statement Clojure seq?使用if测试未在功能中工作,if-statement,clojure,seq,If Statement,Clojure,Seq,我已经创建了这个函数make seq。如果传递了一个类似于“(true-false)的seq列表,它将按原样返回,但如果传递了一个false,它将返回(false) 由于某些原因,它在if检查中总是评估为false (make-seq '(true false)) => ((true false)) (make-seq true) => (true) 不确定为什么它会这样做,因为它在repl上运行,因此测试正常 (seq? '(true false)) =>

我已经创建了这个函数make seq。如果传递了一个类似于“(true-false)的seq列表,它将按原样返回,但如果传递了一个false,它将返回(false)

由于某些原因,它在if检查中总是评估为false

(make-seq '(true false))

 => ((true false))

(make-seq true)
 => (true)
不确定为什么它会这样做,因为它在repl上运行,因此测试正常

 (seq? '(true false))

  => true
defn make seq逻辑在if中不工作的原因是什么


谢谢现在,您的
make seq
函数基本上是丢弃
(如果是seq?数据)
数据
表达式,只返回最终的
(列表数据)

你失去了一个开放的平衡,一个封闭的平衡

;                         ⌄                            ⌄
(defn make-seq [data] (if (seq? data) data (list data)))

Clojure linting工具,如
eastwood
kibit
可以帮助您检测误用,例如您的原始版本的
make seq
,其中您丢弃了表达式,如果这些表达式有副作用,这可能是有意义的,但您的没有。

现在,您的
make seq
函数基本上是丢弃
(如果seq?data)
数据
表达式,只返回最终的
(列表数据)

你失去了一个开放的平衡,一个封闭的平衡

;                         ⌄                            ⌄
(defn make-seq [data] (if (seq? data) data (list data)))

Clojure linting工具,如
eastwood
kibit
可以帮助您检测误用,例如您的原始版本的
make seq
,其中您丢弃了表达式,如果这些表达式有副作用,这可能是有意义的,但您的没有。

(defn make-seq [data] (if (seq? data) data (list data)))

(make-seq '(true false))
=> (true false) 

(make-seq true)
=> (true)

if语句语法需要更正:

(defn make-seq [data] (if (seq? data) data (list data)))

(make-seq '(true false))
=> (true false) 

(make-seq true)
=> (true)

除了其他答案,我还建议使用缩进。即使是像这样的简单表达,它也能帮助眼睛更快、更可靠地识别事物:

(defn make-seq
  [data]
  (if (seq? data)
    data
    (list data)))

(make-seq '(true false))     => (true false)
(make-seq   true)            => (true)

除了其他答案,我还建议使用缩进。即使是像这样的简单表达,它也能帮助眼睛更快、更可靠地识别事物:

(defn make-seq
  [data]
  (if (seq? data)
    data
    (list data)))

(make-seq '(true false))     => (true false)
(make-seq   true)            => (true)

愚蠢的我。谢谢,我真蠢。谢谢