我被Clojure困扰了。我正在尝试编写一个系统,根据简单的规则转换字符串的某些字符,这些规则是成对编码的:[“A”“B”]是将“A”变成“B”的规则
我有一个函数“apply-rules-to-char”,它接受这些规则和char的向量,找到匹配并应用它的第一个规则。它似乎工作
(apply-rules-to-char [["A" "B"]] "C") produces "C"
(apply-rules-to-char [["A" "B"]] "A") produces "B"
(apply-rules-to-char [["A" "B"]] "M") produces "M"
然而,当我现在尝试在字符串中应用它时,使用map
(map (partial apply-rules-to-char [["A" "B"]]) "CAM")
我回来了
(\C \A \M)
换句话说,它通过字符串“CAM”运行,但没有对“A”进行转换。
任何人都能解释为什么会这样吗?
更新:这是apply-rules-to-char的定义。我猜这是不相关的,因为它总是在自己测试时正确执行。它只在地图中失败了。
(defn apply-rules-to-char [rules c]
(let [rule (first (filter #(applicable % c) rules))]
(if (nil? rule) c (apply-rule-to-char rule c) ) ))
答案 0 :(得分:3)
您的apply-rules-to-char
函数似乎需要一个字符串(例如"A"
),而不是字符(例如\A
),这就是字符串的组成部分。换句话说,您的函数需要能够以(apply-rules-to-char [["A" "B"]] \A)
的形式工作,因为它将从map
获得。