在clojure中使用嵌套函数

时间:2013-11-20 17:18:35

标签: clojure nested-loops

我正在尝试创建一个嵌套函数,该函数应该在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"))))

1 个答案:

答案 0 :(得分:1)

你的递归案例周围有一组多余的括号 - 也许你的意思是将getRight和getLeft调用分组成一对?基本情况总是返回nil(来自if的假分支,或来自println),因此最左边的递归被应用,因此你将nil作为函数调用(导致NullPointerException)。