如何在Clojure中移除列表元素?我的代码输出不符合预期
问题分析与修正
你的代码问题出在**(list x)**这一步:当你传入参数'(w x y z)给x时,(list x)会把这个列表再包裹一层,变成'((w x y z))。此时remove #{y}作用在这个外层列表上,外层列表的唯一元素是整个原列表,和你要移除的'w不匹配,所以没有任何元素被移除,最终输出就是外层的嵌套列表。
修正后的代码很简单,直接把(list x)换成x即可:
(defn removeLetter [x y] (remove #{y} x)) (println (removeLetter '(w x y z) 'w))
如果需要确保返回的是列表类型(因为remove返回的是惰性序列),可以用into转换成列表:
(defn removeLetter [x y] (into '() (remove #{y} x))) (println (removeLetter '(w x y z) 'w))
两种写法的输出都会是(x y z),符合你的预期。
内容的提问来源于stack exchange,提问作者user20166753
相关产品推荐
相关产品推荐

