检查字符串是否等于哈希映射值Clojure-无法强制转换

检查字符串是否等于哈希映射值Clojure-无法强制转换,clojure,hashmap,Clojure,Hashmap,所以我有一个函数,我在它上面做了两个if语句,第一个似乎在工作,但是第二个产生了错误 ClassCastException java.lang.String cannot be cast to clojure.lang.IFn user/sort-maps (NO_SOURCE_FILE:1559) 函数传入两个Map“m1+m2”和两个字符串“s1 s2” 问题代码是: (如果没有(=(获取map1 s2)(s1)) 我想做的是看看字符串“s1”是否等于“map s2”处的值中的字符串,但

所以我有一个函数,我在它上面做了两个if语句,第一个似乎在工作,但是第二个产生了错误

ClassCastException java.lang.String cannot be cast to clojure.lang.IFn  user/sort-maps (NO_SOURCE_FILE:1559)
函数传入两个Map“m1+m2”和两个字符串“s1 s2” 问题代码是:
(如果没有(=(获取map1 s2)(s1))

我想做的是看看字符串“s1”是否等于“map s2”处的值中的字符串,但我一直得到那个错误。这就是我的函数

(defn sort-maps [map1 map2 s2 s1]
  (if-not (contains? map1 s2)
    [(assoc map1 s2 s1) map2]
    [map1 (assoc map2 s2 s1)])

  (if-not (= (get map1 s2)(s1))
    [(dissoc map2 (get map1 s2))]
    [map1 (assoc map2 s2 s1)]))
我的意见:

"door" "rood" "odor" "pen" "list" "silt" "#"
我想要的输出是:

{"enp" "pen"}

因为我只想返回在输入中不能组合成任何其他单词的单词,s1是一个字符串,但是通过将其包装在parens中,您正在进行函数调用。字符串不是函数,因此您会看到类型错误

您可能想要
(如果不是((获取map1 s2)s1))

但您似乎有更深的误解。Clojure数据结构是不可变的。这意味着:

user=> (def my-map {:a 1 :b 2})
#'user/my-map
user=> (assoc my-map :c 3)
{:a 1, :b 2, :c 3}
user=> my-map
{:a 1, :b 2}
user=> (dissoc my-map :a 1)
{:b 2}
user=> my-map
{:a 1, :b 2}

因此,您不能像使用ruby或其他语言那样在适当的位置更改值。

munk正确地指出了错误的根源:
(s1)
告诉Clojure将
s1
作为一个无参数的函数调用。然而,即使修复了这个问题,您的代码也不太可能达到您期望的效果

这是函数的主体
排序映射
(带有munk的更正):

执行第一个
if not
语句并返回结果(一对更新的
map1
map2
或一对
map1
和更新的
map2
)由于Clojure中的映射是不可变的,
assoc
不会向现有映射中添加新条目,而是创建一个新映射。因此,此函数体完全等效于

(if-not (= (get map1 s2) s1)
    [(dissoc map2 (get map1 s2))]
    [map1 (assoc map2 s2 s1)])

我不确定您在这里做什么,因此无法进一步帮助您。

如果我这样做,我将无法使用
[(dissoc map2(get map1 s2))]
关于if will i的结果?为什么不?也许你应该编辑你的问题来解释你认为这里发生了什么,以及你期望的输入和输出示例。我想你有一个更深层次的误解,我还没有看到。这就是我试图实现的,就是传递字符串,如“door”“rood”“odor”“pen”“list”“timble”我只想返回“pen”,因为所有其他单词都可以在inputI中转换成另一个单词。我一直遇到一个问题,我以前在那里得到这个返回的
([{}][{}][{}][{}][{}][{}][{}][{}][{}][{}])
我正在做的是传递字符串,比如
“door”“rood”“door”“pen list”“timble”“
我只想返回“pen”,因为所有其他单词都可以在input@Freeman你能不能把它作为函数
排序映射的“输入->预期输出”发布。我知道输入应该由两个映射和两个对象(字符串)组成。而且似乎输出应该是一对以某种方式更新的映射。但我不能推断出任何其他内容。因此,如果您可以提供已知输入的预期结果,这将有所帮助。我已编辑以显示输入/输出,可能还有另一种方法可以解决此问题,但我不明白为什么此方法不起作用。对于解决方案,输入与
s不匹配ort图
需要。输出
{“enp”“pen”}的
map1
map2
s2
s1
是什么?
(if-not (= (get map1 s2) s1)
    [(dissoc map2 (get map1 s2))]
    [map1 (assoc map2 s2 s1)])