[英]Clojure cond or if?
目前,我正在編程一張地圖,該地圖將從一個id中提取一定數量的錢並將其轉移給另一個id,但是每當我添加一個if或cond語句以確保它們的余額時,我總是收到發送過多參數錯誤的信息。 如果我使用cond它說cond需要偶數形式。 任何幫助,將不勝感激
碼:
(defn transfer[ledger from-id to-id amt]
(dosync
(let [from-id (get @ledger from-id)]
(let [to-id (get @ledger to-id) ]
(if from-id
(if to-id
(let [bal1 (get from-id :balance)]
(let [bal2 (get to-id :balance)]
(cond (< amt bal1)
(alter bal1 - amt)
(alter bal2 + amt)
:else "Too much"
)
nil
nil
))))))))
這與cond
或if
,而與“如何將多個s-exp分組為一個並按順序評估它們”有關。
用do
如下所示:
(defn transfer[ledger from-id to-id amt]
(dosync
(let [from-id (get @ledger from-id)
to-id (get @ledger to-id)]
(if (and from-id to-id)
(let [bal1 (:balance from-id)
bal2 (:balance to-id)]
(if (< amt bal1)
(do
(alter bal1 - amt)
(alter bal2 + amt))
"Too much"))))))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.