Clojure Defn在显示正确答案后返回空括号
我试图只让一个黄道带的名字通过它到不同的功能,但我不知道为什么我会在显示的黄道带后得到空括号。我是Clojure的新手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")
(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之间的差异。有什么建议吗?