Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure设置中带有嵌套HashMap的空向量_Clojure - Fatal编程技术网

Clojure设置中带有嵌套HashMap的空向量

Clojure设置中带有嵌套HashMap的空向量,clojure,Clojure,我刚刚开始学习Clojure,我正在尝试编写一些东西,将网页中的一些URL与每个URL周围的一些附加元数据一起拉入内存 我可以获取URL,但它将它们存储在某个我有问题的地方。我发现我需要一个带有嵌套映射的向量,然后我可以使用assoc in向其中添加新记录,但是由于我不知道URL,所以我不确定最初如何定义数据结构 例如: (def *comics* [{:name "Penny-Arcade" :url "http://www.penny-arcade.com/comic/"

我刚刚开始学习Clojure,我正在尝试编写一些东西,将网页中的一些URL与每个URL周围的一些附加元数据一起拉入内存

我可以获取URL,但它将它们存储在某个我有问题的地方。我发现我需要一个带有嵌套映射的向量,然后我可以使用assoc in向其中添加新记录,但是由于我不知道URL,所以我不确定最初如何定义数据结构

例如:

(def *comics*
  [{:name "Penny-Arcade"
    :url "http://www.penny-arcade.com/comic/"
    :working 0
   }
   {:name "We The Robots"
    :url "http://www.wetherobots.com/"
    :working 0
   }])
我只是不确定如何在没有数据的情况下启动上面的数据结构,然后添加它(最初是从命令行arg添加的),然后从网站添加其余的数据结构


如果有人能提出一种更好的方法来存储上述数据,请放心。

我认为您想从一些命令行参数中修改
*漫画*
变量,然后在“处理”其中的元素时对其进行更多的修改

我建议你不要那样做


似乎没有任何理由不能从命令行获取漫画URL,并将它们作为参数传递给执行处理并从这些URL返回所需内容的函数。这样做——也就是说;在功能上,没有变异VAR-在clojure中肯定更容易实现,更易于并行化,而且更加惯用和有趣。

或者您可以使用像Ref这样的STM抽象,以防您真的需要在整个应用程序流中的各个点更新这些数据。我想我会首先从命令行填充第一个URL,然后应用程序会生成更多的URL来存储。应用程序的另一部分,使用并发,将验证这些URL是否仍然有效。我还不知道这是否可行,但STM听起来确实允许我这么做。@Dale从您描述的内容来看,它似乎需要递归函数调用,而不是URL的变异存储。你当然可以使用refs/atoms等来构建变异存储,但我不会假设这是解决问题的最佳方法,因为现在已经很清楚你不需要这样做了。@JoostDiepenmaat我试图在脑海中描绘递归方法,但是,当它在每个网页之间的链接中爬行时,我不会只点击每个网页上的第一个链接吗?好的,我想我用递归解决了这个应用程序,需要做更多的工作,但我会把它标记为已回答,因为你让我考虑其他选择。谢谢