Понимание возврата рекурсивной функции - PullRequest
0 голосов
/ 12 декабря 2018

Я новичок в Clojure и пытаюсь понять, почему две функции ниже отличаются.

Первая

(defn rp [i]
  ((println i)
   (if (> i 3)
     (println "bye")
     (rp (inc i)))))

Вторая

(defn rp
  ([i] (println i)
       (if (> i 3)
         (println "bye")
         (rp (inc i)))))

Когда я вызываю их с (rp 0), первый печатает

0
1
2
3
4
bye
CompilerException java.lang.NullPointerException, compiling:(/Users/...) 

и второй печатает

0
1
2
3
4
bye
=> nil

Почему они разные?Почему функция first вызывает NullPointerException?

1 Ответ

0 голосов
/ 12 декабря 2018

Ваш первый пример имеет символы parns вокруг тела и вызывает результат (println i) (то есть nil) как функцию.Например, ((println :a) :b) броски.Скорее всего, это связано с вашими экспериментами с разными артериями во втором примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...