【问题标题】:Clojure returning a list of strings from a for methodClojure 从 for 方法返回字符串列表
【发布时间】: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


【解决方案1】:

首先,Joost 说的很到位。

我想你想要的是这个?

(def my-map {:a '(:b :c :d) :e '(:f :g :h)})

(apply str (map #(str (first %) " contains " (second %) " ") my-map))
":a contains (:b :c :d) :e contains (:f :g :h) "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多