【发布时间】:2019-02-27 08:54:04
【问题描述】:
我是 Clojure 中的概率编程语言 Anglican 的新手。我正在尝试在 Clojure 中使用嵌套的 let 构造。
以下defquery运行没有任何问题。
(defquery panda3 [p1]
(let [p2 (sample
(categorical
{:speA (/ 1 2),
:speB (/ 1 2)}))]
(if (= p2 :speA)
( let [p3 (sample
(categorical
{:twins (/ 1 10),
:notwins (/ 9 10)}))]
)
( let [p3 (sample
(categorical
{:twins (/ 2 10),
:notwins (/ 8 10)}))]
))
p2))
但是,如果我尝试返回 p3 的值,而不是最后返回 p2 的值,它会返回错误。
(defquery panda3 [p1]
(let [p2 (sample
(categorical
{:speA (/ 1 2),
:speB (/ 1 2)}))]
(if (= p2 :speA)
( let [p3 (sample
(categorical
{:twins (/ 1 10),
:notwins (/ 9 10)}))]
)
( let [p3 (sample
(categorical
{:twins (/ 2 10),
:notwins (/ 8 10)}))]
))
p3))
这个想法是根据 p2 的结果分配 p3。但是,我无法这样做。我究竟做错了什么?
提前致谢,
【问题讨论】:
-
let定义在let的主体中可用的局部变量。在您尝试返回p3的位置,p3未定义。
标签: clojure