Ничего не происходит внутри моего цикла Clojure - PullRequest
5 голосов
/ 03 апреля 2012

У меня небольшой код, который вообще не хочет работать, когда я выполняю цикл, подобный следующему:

...

    (defn my-function []
        (println "Hi")   ;this works
        (for [i (range 10)] (println "Hello")  ;this doesn't work!
          )
    )

...

Я не могу понять, в чем проблема, весь код внутрицикл, кажется, игнорируется, в то время как «Привет» печатает без проблем

Я называю «myfunction» через событие кнопки GUI, например:

...
    (.append output-text (with-out-str  (time (my-function))))
...

Как вы думаете, проблема может сохранятьсяв графическом интерфейсе или что-то еще мне не хватает?Любое предложение?Я знаю, что я должен использовать REPL для тестирования, но он не работает с Netbeans ...: S

Большое спасибо за вашу помощь.

Ответы [ 2 ]

11 голосов
/ 03 апреля 2012

Макрос for является ленивым, поэтому он не будет вызывать вашу функцию, если возвращаемое значение не требуется.

Вместо этого используйте функцию doseq. Это заставит вас оценивать ваш код и, следовательно, не ленится. Он имеет тот же «синтаксис», что и for, и позволяет учитывать побочные эффекты, такие как println.

3 голосов
/ 03 апреля 2012

Еще один способ сделать это - использовать «dorun», если я правильно помню, что dorun предназначен для создания побочных эффектов (например, println).Функция должна выглядеть следующим образом:

(defn my-function[]
  (println "Hi")
  (dorun (for [i (range 10)] (println "Hello"))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...