Clojure 序列?测试不能与 if 一起工作
Clojure seq? test not working in function with if
我创建了这个函数make-seq。如果传递了一个像 '(true false) 这样的 seq 列表,它 returns 它是原样的,但是如果传递一个单一的 false 它 returns (false)。
(defn make-seq [data] (if seq? data) data (list data))
出于某种原因,它总是将 if 检查评估为 false。
(make-seq '(true false))
=> ((true false))
(make-seq true)
=> (true)
不确定为什么要这样做,因为 运行 在 repl 上它可以通过测试。
(seq? '(true false))
=> true
为什么 defn make-seq 逻辑在 if 中不起作用?
谢谢
现在,您的 make-seq
函数基本上丢弃了 (if seq? data)
和 data
表达式,只返回最后的 (list data)
.
您缺少一个开括号和一个闭括号以保持平衡。
; ⌄ ⌄
(defn make-seq [data] (if (seq? data) data (list data)))
Clojure linting 工具,如 eastwood
和 kibit
可以帮助您检测误用,例如您丢弃表达式的 make-seq
的原始版本,如果这些表达式有副作用,这可能是有意义的-效果,但你的没有。
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)
我创建了这个函数make-seq。如果传递了一个像 '(true false) 这样的 seq 列表,它 returns 它是原样的,但是如果传递一个单一的 false 它 returns (false)。
(defn make-seq [data] (if seq? data) data (list data))
出于某种原因,它总是将 if 检查评估为 false。
(make-seq '(true false))
=> ((true false))
(make-seq true)
=> (true)
不确定为什么要这样做,因为 运行 在 repl 上它可以通过测试。
(seq? '(true false))
=> true
为什么 defn make-seq 逻辑在 if 中不起作用?
谢谢
现在,您的 make-seq
函数基本上丢弃了 (if seq? data)
和 data
表达式,只返回最后的 (list data)
.
您缺少一个开括号和一个闭括号以保持平衡。
; ⌄ ⌄
(defn make-seq [data] (if (seq? data) data (list data)))
Clojure linting 工具,如 eastwood
和 kibit
可以帮助您检测误用,例如您丢弃表达式的 make-seq
的原始版本,如果这些表达式有副作用,这可能是有意义的-效果,但你的没有。
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)