【发布时间】:2012-11-16 16:50:41
【问题描述】:
我有一张地图,我想用它来处理和添加它的所有值以及作为输出的一部分的键。
(def map {:a (:b :c :d) :e (:f :g :h)})
我想做'for all keys return "a: contains (:b :c and :d)"' 并将字符串加在一起以获得最终输出:"a: contains (:b :c and :d ) :e 包含 (:f :g 和 :h)""
我最初尝试了一个doseq,其中我尝试将键和值解构为'k'和'v',然后(str k“包含”v) 然后我把字符串吐到一个文件中。
这什么也没做,所以我添加了一个打印语句来说明键和值对。它们被打印出来但没有添加到文件中。
我读过,似乎我需要使用一个“for”,它可以与 doseq 互换,但很懒,但返回值很重要。
更改为 for 立即给了我错误数量的参数错误,这很奇怪,因为我有两个解构和一个返回字符串的方法体。我摆弄并最终编译了一个 for 循环,但我将对象作为字符串而不是内容获取。
这让我发疯了。
谁能帮我做点什么?
非常感谢,
【问题讨论】:
-
包含您认为最接近正确的代码可能会有所帮助。
-
我不太明白那段文字,您可能只想发布您的代码而不是告诉我们。
-
一些备注。
(def map {:a (:b :c :d) :e (:f :g :h)})- 覆盖当前命名空间中的map,它通常别名为 clojure.core/map,除非你阻止它。 - 将map定义为{:a :d :e :h},因为您没有引用列表。您通常希望对文字使用向量而不是列表。出于这些原因,(def my-map {:a [:b :c d] :e [:f :g :h]})之类的内容更加惯用。另外,我不明白这个问题。
标签: string data-structures map clojure