Я хотел бы знать, как увеличить на X количество цифр, на других языках, которые я использовалКак увеличить число в Clojure?
foo + = 0.1;
, но я не знаю, как это может быть сделано в Clojure
Я хотел бы знать, как увеличить на X количество цифр, на других языках, которые я использовалКак увеличить число в Clojure?
foo + = 0.1;
, но я не знаю, как это может быть сделано в Clojure
переменные неизменны в Clojure. Таким образом, вы не должны пытаться изменить значение foo
, но вместо этого, «создать» новый Foo:
(def foo2 (+ foo 0.1))
... или, если в цикле, повторялись с новым значением:
(loop [foo 5.0]
(when (< foo 9)
(recur (+ foo 0.1))))
... или, если Foo является атом, swap!
его с новым значением:
(def foo (atom 5.0))
(swap! foo (partial + 0.1))
Я рекомендую вам начать с чтения the rationale of Clojure.
ответ Блэксад охватывает определение ВАРА, так что я просто хотел бы добавить другие области, в которых вы можете иметь значение, которое увеличивается на единице от другого значения:
в локальной области видимости функции во:
user> (defn my-function [x]
(let [y (inc x)
z (+ x y)]
[x y z]))
#'user/my-function
user> (my-function 4)
[4 5 9]
и если вы хотите, чтобы построить значение с приращением, чтобы сделать процесс более ясным:
user> (defn my-function [x]
(let [y (inc x)
z (+ x y)
z (+ z 4)
z (* z z)]
[x y z]))
#'user/my-function
user> (my-function 4)
[4 5 169]
Это может сделать процесс более презентабельно, ты gh это не «способ вернуть переменные» и действительно полезен только в ограниченных контекстах. Этот шаблон используется в макросах clojure.core.
Является ли' let * 'просто подсказкой (что присвоения не являются независимыми) или ведет себя иначе, чем' let'? – Blacksad
let - макрос, который вызывает вызов, позволяющий * https://github.com/clojure/clojure/blob/c6756a8bab137128c8119add29a25b0a88509900/src/clj/clojure/core.clj#L4035 –
Я не понимаю, почему 'let *' здесь тоже. Очевидно, это не то, что вы напишете в реальной жизни, и, похоже, это не служит какой-либо учебной цели в этом контексте. Это просто отвлекает от основного момента, а именно, как использовать 'let' для создания новых областей. – amalloy
Отображение vars как единственного способа создания нового значения вводит в заблуждение - в большинстве случаев, когда требуется заменить значение другим, это неправильный инструмент. Атомы, петли и т. Д., Вероятно, должны иметь более заметное место в примерах. –
['swap!'] (Http://clojuredocs.org/clojure_core/clojure.core/swap!) Принимает функцию и аргументы, чтобы сделать обновление, поэтому вы можете записать его так, а не использовать 'partial':' (swap! foo + 0.1) ' – DaoWen