我正在尝试创建一个嵌套函数,该函数应该在Clojure中以递归方式运行,以便收集一些信息。 我已经看过一些技术,如fn,loop,doseq,但我现在对它们并不好。
首先让我解释一下为什么我要使用递归函数: 我有一个类,这个类本身包含2个方法,这些方法分别是getLeft()和getRight(),加上方法的返回类型也是一个类。我想要简单地遍历所有getLeft和getRight方法,以便从中获取正确的数字。
为了清楚起见,我提出了一个架构:
我的主要课程:
+-- getRight(): class - getLeft/getRight
++ getLeft(): class ---
+-- getLeft((): class - getLeft/getRight
+-- getRight(): class - getLeft/getRight
++ getRight() :class
+-- getLeft((): class - getLeft/getRight
我还创建了一个名为“loopingP”的函数,但是当我将这个函数添加到另一个函数时,它会出错。 错误:NullPointerException org.mtrcclojure.demo / loopingP(NO_SOURCE_FILE:4)
(defn loopingP [points]
(if (= (getKind points) 5)
( (loopingP (getRight points)) (loopingP (getLeft points)))
(if (= (getKind points) 3) (println "Yep"))))
如何才能在Clojure中正确使用嵌套函数? 提前谢谢!
解决方案是:放一个[]
(defn loopingP [points]
(if (= (getKind points) 5)
[ (loopingP (getRight points)) (loopingP (getLeft points))]
(if (= (getKind points) 3) (println "Yep"))))
答案 0 :(得分:1)
你的递归案例周围有一组多余的括号 - 也许你的意思是将getRight和getLeft调用分组成一对?基本情况总是返回nil(来自if的假分支,或来自println),因此最左边的递归被应用,因此你将nil作为函数调用(导致NullPointerException)。