String 字符串上的Clojure映射
我在Clojure被难住了。我正在尝试编写一个系统,该系统基于简单的成对编码规则来转换字符串的某些字符:[“a”“B”]是将“a”转换为“B”的规则 我有一个函数“apply rules to char”,它接受这样一个规则和一个char的向量,找到匹配的第一个规则并应用它。它似乎起作用了String 字符串上的Clojure映射,string,map,clojure,higher-order-functions,String,Map,Clojure,Higher Order Functions,我在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"]] "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”进行转换
有人能解释为什么会这样吗
更新:下面是对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) ) ))
apply rules to char
函数似乎想要一个字符串(例如“a”
),而不是一个字符(例如\a
),这是字符串的组成部分。换句话说,您的函数需要能够作为(将规则应用于char[[“A”“B”]]\A)
,因为这是它将从映射中获得的。。所以单个字符不等于长度为1的字符串?@interstar:no。字符是与字符串不同的类型。