Clojure有变量引用吗?

inv*_*ser 3 pointers clojure

我正在尝试实现神经网络,每个神经元都需要引用其他神经元.我一直试图通过原子实现这个引用.

考虑一下代码

(def neuron1 {:connections [(atom 0)])
(def neuron2 {:connections [(atom neuron1)]})

(update-in neuron1 [:connections 0] #(reset! % neuron2))
Run Code Online (Sandbox Code Playgroud)

最后一次将打击堆栈.

因此,似乎原子包含其内容,而不仅仅是引用它们.

如果我想传递等效的指针,我该怎么办?我是否必须使用某个功能,如

(def neuron1 {:connections [(fn [] neuron2)]})
Run Code Online (Sandbox Code Playgroud)

并调用它,而不是使用原子并解除引用它?

Wol*_*Fan 5

你的代码很好.你正在堆栈的原因是你在REPL上运行update-in命令,这会导致它打印结果.由于每个神经元都嵌套在另一个神经元中,因此print语句遇到堆栈溢出.尝试将update-in命令包含在另一个语句中,例如(type),或者在另一个函数中运行它.