Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何打印以“结束”结尾的树元素;“愤怒”;在Clojure?_Clojure_Tree - Fatal编程技术网

如何打印以“结束”结尾的树元素;“愤怒”;在Clojure?

如何打印以“结束”结尾的树元素;“愤怒”;在Clojure?,clojure,tree,Clojure,Tree,我试图在Clojure中为给定的树结构按预先顺序(根、左、右)打印树元素 下面的代码按预先的顺序打印元素,但我不知道如何应用条件来检查字符串是否以“ire”结尾 我试着用过滤器,什么时候用。有人能帮忙吗 (defn preorder [tree] (if (nil? (:root tree)) (str nil) (let [v (:root tree) l (:left tree) r (:right tree)] (

我试图在Clojure中为给定的树结构按预先顺序(根、左、右)打印树元素

下面的代码按预先的顺序打印元素,但我不知道如何应用条件来检查字符串是否以“ire”结尾

我试着用过滤器,什么时候用。有人能帮忙吗

(defn preorder [tree]
  (if (nil? (:root tree))
    (str nil)
    (let [v (:root  tree)
          l (:left  tree)
          r (:right tree)]
      (str v
           (str " ")
           (str l (str " ") (preorder l))
           (str " ")
           (str r (str " ")(preorder r))))))
建议:

  • 算法:生成遍历树的
    :root
    值序列。 使用序列库
    映射
    过滤器
    ,将其转换为字符串 或者根据需要过滤节点
  • 数据:对
    :left
    :right
    使用
    nil
    值,而不是
    :root
因此:

(defn preorder [tree]
  (if tree
    (let [v (:root  tree)
          l (:left  tree)
          r (:right tree)]
      (cons v (concat (preorder l) (preorder r))))))
比如说

(preorder {:root 5, :left {:root 10}})
;(5 10)

(filter even? (preorder {:root 5, :left {:root 10}}))
;(10)

当心,如果你的树太深,你会用完堆栈

我找不到你要找的东西。但是
(.endsWith“fire”“ire”)
可以检查
fire
是否以
ire
结尾。此代码已经在遍历一棵树,我要查找的是如何在代码中应用该条件。此代码:(.endsWith“fire”“ire”)。我尝试执行(.endsWith tree“ire”),但当我将左树和右树传递给该树时,这会引发空指针异常。您能给我们一个树的示例吗?如果
tree
返回任何对
(:root tree)
等有用的内容,则对其调用
endsWith
方法将无效。你说的是jvm上类型中的字符串,还是树表示法中的某个路径称为字符串?对于其他好奇的人来说,最后一行的可读版本是
(str v“l”“(preorder l)”“r”“(preorder))
,关于堆栈,我认为用
lazy cat
替换
concat
可以解决这个问题issue@noisesmith我不确定。将整个表达式包装在一个
lazy-seq
@noises中可能会这样,但我宁愿将整个函数体包装在一个
lazy-seq
中。