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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/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 “loop won”的“let”inside“中的stations';我不能同时跑_Clojure_Neo4j - Fatal编程技术网

Clojure “loop won”的“let”inside“中的stations';我不能同时跑

Clojure “loop won”的“let”inside“中的stations';我不能同时跑,clojure,neo4j,Clojure,Neo4j,我正在尝试使用clojure和neocons库将数据从StackOverflow导入Neo4j。请原谅我是个新手 以下是我在莱宁根的主要职能: (defn -main [& args] (let [neo4j-conn (nr/connect "http://localhost:7777/db/data/")] (cypher/tquery neo4j-conn "MATCH n OPTIONAL MATCH n-[r]-() DELETE n, r")

我正在尝试使用clojure和neocons库将数据从StackOverflow导入Neo4j。请原谅我是个新手

以下是我在莱宁根的主要职能:

(defn -main
  [& args]

  (let [neo4j-conn  (nr/connect "http://localhost:7777/db/data/")]

    (cypher/tquery neo4j-conn "MATCH n OPTIONAL MATCH n-[r]-() DELETE n, r")

    (for [page (range 1 6)]
      (let [data (parse-string (stackoverflow-get-questions page))
            questions (data "items")
            has-more (data "has_more")
            question-ids (map #(%1 "question_id") questions)
            answers ((parse-string (stackoverflow-get-answers question-ids)) "items")]
        (map #(import-question %1 neo4j-conn) questions)
        (map #(import-answer %1 neo4j-conn) answers)
      )
    )
  )
)
我已经定义了
导入问题
导入答案
函数,这些函数可以独立工作。事实上,奇怪的是,我可以删除那些
import-*
行中的任何一行,而另一行可以正常工作


有人能看出我做的简单的事情是不是错了吗?

map和
for
都是懒惰的,除非你使用它们的结果,否则它们什么都不会做

第一个
map
调用最终是一个noop,因为任何东西都无法使用它的输出。尝试为包装
,并至少包装对
dorun
的调用中的第一个map调用,或者如果您计划使用结果,则包装
doall

此外,您还可以将
替换为
doseq
,除了它返回nil、急切地消耗其输入以及可以在其主体中包含多个表单之外,这是相同的

下面是使用
doseq
时代码的外观:

(defn -main
  [& args]
  (let [neo4j-conn (nr/connect "http://localhost:7777/db/data/")]
    (cypher/tquery neo4j-conn "MATCH n OPTIONAL MATCH n-[r]-() DELETE n, r")
    (doseq [page (range 1 6)
            :let [data (parse-string (stackoverflow-get-questions page))
                  questions (data "items")
                  has-more (data "has_more")
                  question-ids (map #(%1 "question_id") questions)
                  answers ((parse-string (stackoverflow-get-answers question-ids)) "items")]]
      (doseq [q questions]
        (import-question q neo4j-conn))
      (doseq [a answers]
        (import-answer a neo4j-conn)))))

map
for
都是懒惰的,除非您使用它们的结果,否则它们什么都不会做

第一个
map
调用最终是一个noop,因为任何东西都无法使用它的输出。尝试为
包装
,并至少包装对
dorun
的调用中的第一个map调用,或者如果您计划使用结果,则包装
doall

此外,您还可以将
替换为
doseq
,除了它返回nil、急切地消耗其输入以及可以在其主体中包含多个表单之外,这是相同的

下面是使用
doseq
时代码的外观:

(defn -main
  [& args]
  (let [neo4j-conn (nr/connect "http://localhost:7777/db/data/")]
    (cypher/tquery neo4j-conn "MATCH n OPTIONAL MATCH n-[r]-() DELETE n, r")
    (doseq [page (range 1 6)
            :let [data (parse-string (stackoverflow-get-questions page))
                  questions (data "items")
                  has-more (data "has_more")
                  question-ids (map #(%1 "question_id") questions)
                  answers ((parse-string (stackoverflow-get-answers question-ids)) "items")]]
      (doseq [q questions]
        (import-question q neo4j-conn))
      (doseq [a answers]
        (import-answer a neo4j-conn)))))

你的具体问题不是重复的,但答案肯定是重复的。
map
for
都是懒惰的,除非您使用它们的结果,否则它们什么都不会做。第一个
map
调用最终是一个noop,因为任何东西都无法使用它的输出。尝试将
包装为
,至少将第一个
映射
调用包装为对
dorun
的调用。啊,太好了,当然就是这样。谢谢懒惰的虫子不时地咬我们所有人(至少是我)。附言:@noisesmith足够长的时间来输入答案。对不同问题的重复回答没有什么错。如果有一个公认的答案,它将帮助那些从搜索中走到这里的人。好的,谢谢。那就回答吧。@noisesmith你应该提到
doseq
,这才是OP真正想要的。只知道副作用的顺序是不好的风格。你的具体问题不是重复的,但答案肯定是重复的。
map
for
都是懒惰的,除非您使用它们的结果,否则它们什么都不会做。第一个
map
调用最终是一个noop,因为任何东西都无法使用它的输出。尝试将
包装为
,至少将第一个
映射
调用包装为对
dorun
的调用。啊,太好了,当然就是这样。谢谢懒惰的虫子不时地咬我们所有人(至少是我)。附言:@noisesmith足够长的时间来输入答案。对不同问题的重复回答没有什么错。如果有一个公认的答案,它将帮助那些从搜索中走到这里的人。好的,谢谢。那就回答吧。@noisesmith你应该提到
doseq
,这才是OP真正想要的。只实现副作用序列是一种糟糕的风格。太棒了,谢谢!即使它是复制品,拥有它也绝对不错。我搜索了很多,但找不到任何答案,因此我们正在为有此问题的用户增加登录空间,我想这太棒了,谢谢!即使它是复制品,拥有它也绝对不错。我搜索了很多,找不到任何答案,所以我想我们正在为有这个问题的用户增加登陆空间