我想知道如何定义一个返回地图的函数。现在我有两个辅助功能。 一个是:
(string->ascii str)
可以将字符串转换为ascii代码,例如:
user=> (string->ascii "ouch")
(79 85 67 72)
user=> (string->ascii "gulp")
(71 85 76 80)
另一个功能是:
(ascii->num96 seq)
可以将列表转换为小数,例如:
user=> (ascii-num96 '(79 85 67 72))
70684008
user=> (ascii-num96 '(71 85 76 80))
63606992
现在,我需要定义一个函数“make-dict”将这两个函数一起调用并返回一个map。结果应该是:
user=> (make-dict ["ouch" "gulp"])
{"ouch" 70684008, "gulp" 63606992}
我写了一些代码,但它不起作用,如:
(defn make-dict [vector]
(map (ascii-num96 #(string-ascii %)) vector))
是否有人可以教导如何获得这样的结果?非常感谢你!
答案 0 :(得分:3)
这个怎么样?
(defn make-dict [words]
(zipmap words (map (comp ascii-num96 string->ascii) words)))
你基本上需要2个seqs - words
和(map (comp ascii-num96 string->ascii) words)
- 并将它们压缩到地图中。
答案 1 :(得分:2)
或没有zipmap
:
(into {} (map vector names (map (comp ascii-num96 string->ascii) names)))
正在发生的两件事可能会引起人们的兴趣,其中包括一些'技巧。一个是你可以使用map
多个输入序列,你的映射函数'只需要能够处理相同数量的参数。这里的映射函数是vector
,它接受一个单词和一个数字并将它们组合在一起,如下所示:[" gulp" 34234]。
另一件事是函数into
将向量解释为键/值对。