Clojure Factorials - PullRequest
       1

Clojure Factorials

0 голосов
/ 03 марта 2020
(ns factorials)

(defn displayFactorials[number]
    (if (> number 1)
        (do
        (* number (displayFactorials(- number 1))))))

(defn -main []
    (println "To display the factorials,")
    (print " enter the number: ") (flush)
    (let
        [ number (double (read))]
        (println)
        (displayFactorials number)
        (println)
    )
)

Я пишу факториальную программу, которая получает пользовательский ввод. Программа компилируется, но результат не печатается. Любые предложения о том, что я должен делать?

1 Ответ

1 голос
/ 03 марта 2020

Вам нужно, чтобы это выглядело так:

(println (displayFactorials number))

Вот более отформатированная версия программы:

(ns demo.core)

(defn displayFactorials
  [number]
  (if (> number 1)
    (* number (displayFactorials (- number 1)))))

(defn -main []
  (println "To display the factorials,")
  (print " enter the number: ") (flush)
  (let [number (double (read))]
    (println
      (displayFactorials number))))

Подсказка: Вы также забыли о том, что делать, если число равно единице.


Обновление

См. подсказку выше. Запишите модульный тест в файл test/tst/demo/core.clj, например:

(ns tst.demo.core
  (:use demo.core tupelo.test))

(deftest dummy#
  (println :answer (displayFactorials 5)))

Попробуйте запустить lein test и увидите исключение:

ERROR in (dummy#) (Numbers.java:1068)
Uncaught exception, not in assertion.
expected: nil
  actual: java.lang.NullPointerException: null
 at clojure.lang.Numbers.ops (Numbers.java:1068)
    clojure.lang.Numbers.multiply (Numbers.java:173)
    demo.core$displayFactorials.invokeStatic (core.clj:6)
    demo.core$displayFactorials.invoke (core.clj:3)
    demo.core$displayFactorials.invokeStatic (core.clj:6)
    demo.core$displayFactorials.invoke (core.clj:3)
    demo.core$displayFactorials.invokeStatic (core.clj:6)
    demo.core$displayFactorials.invoke (core.clj:3)
    demo.core$displayFactorials.invokeStatic (core.clj:6)
    demo.core$displayFactorials.invoke (core.clj:3)
    tst.demo.core$fn__18527.invokeStatic (core.clj:11)
    tst.demo.core/fn (core.clj:10)

, которое должно быть BIG подсказка относительно того, чего не хватает.

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