我只是想转换为字符串并与反向
进行比较(defn is-palindrome? [num]
(= (str num) (reverse (str num))))
像
这样的东西(is-palindrome 1221)
返回false
答案 0 :(得分:9)
请改为尝试:
(defn is-palindrome? [num]
(= (str num) (apply str (reverse (str num)))))
在您的代码中,表达式(reverse (str 1221))
返回字符(\1 \2 \2 \1)
的列表,需要将其转换回字符串以便进行比较。或者,您可以将两个数字转换为字符列表,然后执行列表比较:
(defn is-palindrome? [num]
(= (seq (str num)) (reverse (str num))))
答案 1 :(得分:6)
(defn palindrome? [num]
(= (seq (str num)) (clojure.string/reverse (str num))))
答案 2 :(得分:3)
您的代码返回false,因为它正在将字符串与序列进行比较,而序列永远不会相等。
您可以通过将字符串显式转换为seq来使其工作,如下所示:
(defn is-palindrome? [num]
(let [digit-sequence (seq (str num))]
(= digit-sequence (reverse digit-sequence))))
答案 3 :(得分:1)
事实证明,操纵字符集合的开销占主导地位,因此将原始字符串与反转版本进行比较实际上会更快,即使您想要比较两倍于必要的字符。确保使用clojure.string / reverse,而不是clojure.core / reverse。通常的Clojure约定是使用问号结束谓词,但不使用“is”前缀。
(require 'clojure.string)
(defn palindrome? [s] (= s (clojure.string/reverse s)))
(defn palindrome-num? [n] (palindrome? (str n)))
答案 4 :(得分:0)
(reverse (str 1221))
返回字符列表
(\1 \2 \2 \1)
但是(str 1221)是一个java String