Clojure Defn在显示正确答案后返回空括号

Clojure Defn在显示正确答案后返回空括号,clojure,lisp,parentheses,defn,Clojure,Lisp,Parentheses,Defn,我试图只让一个黄道带的名字通过它到不同的功能,但我不知道为什么我会在显示的黄道带后得到空括号。我是Clojure的新手 (defn miko [] (let [guess (read)] (remove nil?(cond (some #(= guess %) (range 101 120))(println "Capricorn")

我试图只让一个黄道带的名字通过它到不同的功能,但我不知道为什么我会在显示的黄道带后得到空括号。我是Clojure的新手

(defn miko []
                        (let [guess (read)]  
                        (remove nil?(cond 

                             (some #(= guess %) (range 101 120))(println "Capricorn")
                             (some #(= guess %) (range 120 219))(println "Aquarius")
                             (some #(= guess %) (range 219 321))(print "Pisces")
                             (some #(= guess %) (range 321 420))(print "Aries")
                             (some #(= guess %) (range 420 521))(print "Taurus")
                             (some #(= guess %) (range 521 621))(print "Gemini")
                             (some #(= guess %) (range 621 723))(print "Cancer")
                             (some #(= guess %) (range 723 823))(print "Leo")
                             (some #(= guess %) (range 823 923))(print "Virgo")
                             (some #(= guess %) (range 923 1023))(print "Libra")
                             (some #(= guess %) (range 1023 1122))(print "Scorpio")
                             (some #(= guess %) (range 1122 1221))(print "Sagittarius")
                             (some #(= guess %) (range 1221 3112))(print "Capricorn")
                             :else "wrong"))))
我运行它(miko),结果如下:

摩羯座

()


请帮我删除这个,因为当我想将结果名传递给另一个函数(例如,Capricorn)时,它会向下传递()-括号

您做得很好,只需删除打印语句,例如,将
(打印“Capricorn”)
替换为
“Capricorn”
,该功能即可工作


您也不需要打印结果的
(删除零?…)

。如果您想返回那里的字符串,请去掉
(print X)
,然后使用
X
谢谢您帮助我解决Leonid!!!!它现在工作得很好!!!!你的评论让我对clojure有了更多的了解。我昨天才开始学习它,所以比我早了很多。@user3297995如果你以前使用过其他编程语言,那也没什么不同。例如,C中的printf返回一个int。这意味着,如果打印printf的结果,则得到的不是打印的输出。如果你做了printf(“%d”,printf(“摩羯座”)你会看到“摩羯座”和“9”。Clojure的照片正好返回(),所以你可以看到“摩羯座”和“()”。不幸的是,最后一部分错了<代码>包含?对于来自其他语言的人来说是一个常见的假朋友,因为它不查看给定集合中的值。它接受关联集合并检查其中是否存在给定的键。范围不是关联集合,因此对范围使用
contains?
会产生IllegalArgumentException。要测试seq中的成员资格,您需要使用
some
。在这种情况下,只需使用比较运算符(例如,
#(@user1571406谢谢!实际上双重比较更合适。您将如何更改此行:(some{guess}(范围101 120))(println“Capricorn”)来处理十进制值,例如:(some{guess}(范围1.01 1.20))(println“Capricorn”).当我把它改为小数时,它看不到1.01和1.23之间的差异。有什么建议吗?