![](/img/trans.png)
[英]How to use a compiled Clojure class in Eclipse with Counterclockwise
[英]clojure: how to use recur in if statement
免責聲明:我正在學習Clojure。
這是我要運行的簡單示例:
(ns ClojureTest.core)
(let [input (read-line)]
;if user input = "x"
(if (= "x" input)
;stop accepting input
(println "Exit")
;else output the input and continue accepting input
(
(println input)
(recur)
)
)
)
現在我遇到了這個錯誤,我認為這是有道理的,因為我不熟悉語法:
Exception in thread "main" java.lang.UnsupportedOperationException: Can only recur from tail position, compiling:(ClojureTest/core.clj:8:7)
我該如何解決?
附帶問題:
在這種特殊情況下,你錯過了一個do
了的“其他”條款中if
:
(do
(println input)
(recur))
如果沒有do
,您將得到((println input) (recur))
,它看起來像一個函數調用,其中(println input)
的返回值是要調用的函數,而(recur)
是參數表達式,因此,不是在尾巴位置。
(很明顯, (println input)
將返回nil
並嘗試將其作為函數調用將拋出NullPointerException
,但這在此無關緊要-這將是運行時錯誤,而可檢測到recur
-not-in-tail-position問題在編譯時。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.