Порядок кода в Clojure

Я взял все подкасты из ответов, выиграв 5 или лучше (и те в исходном вопросе) и добавил их к агрегированной странице на Cullect.com:

http://www.cullect.com/StackOverflow-Recommended-Podcasts

Это обеспечивает удобный способ получить представление об этих подкастах, а также способе предварительно просмотреть их, если Вы спешите или не хотите пробираться через все дубликаты в ответах. Я в настоящее время настраиваюсь как единственный куратор "cullection", но если кто-то еще хочет помочь сохранить скорректированным, когда ответы изменяются, сообщить мне.

36
задан liwp 10 February 2012 в 14:25
поделиться

3 ответа

Вверху кода введите:

(declare readCmd)
11
ответ дан 27 November 2019 в 05:25
поделиться

Вы можете использовать форвардные объявления в Clojure, чтобы вы могли вызывать функции, которые еще не были определены.

(declare readCmd)

должно работать!

В Clojure вы определяете функции в следующем порядке. важно, функция не может вызывать другую функцию (или что-то еще в этом отношении), которая еще не была определена. Вот почему у нас есть форвардные объявления.

64
ответ дан 27 November 2019 в 05:25
поделиться

Как уже ответили другие, вам необходимо (объявить readCmd), чтобы исправить вашу непосредственную проблему.

Тем не менее, с этим кодом все еще есть проблемы, поскольку он фактически реализует итеративный процесс с использованием взаимного рекурсия (readCmd -> ajout -> readCmd -> imrimer -> readCmd -> ...), которая будет потреблять стек, и вы получите (при) переполнение стека. Лучший способ организовать это - сделать readCmd tail рекурсивным и заставить его вызывать действия. Когда действие возвращается, readCmd tail рекурсивно вызывает себя.

Также этот фрагмент кода:

((println "Ajout 8o") (ajout botin))

, вероятно, не то, что вы хотите сделать: он вызовет println и попытается использовать результат как функцию. Вместо этого используйте «do»:

(do (println "Ajout 8o") (ajout botin))

Вы также можете прочитать о case или cond, они упростят вложенные if.

18
ответ дан 27 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: