Debugging 在条件子句中看不到Prolog变量
我在Prolog中从事一个项目,偶然发现了一个问题: 假设我正在使用一个列表Debugging 在条件子句中看不到Prolog变量,debugging,prolog,Debugging,Prolog,我在Prolog中从事一个项目,偶然发现了一个问题: 假设我正在使用一个列表[H | T] function1(H,T), check(H,T,Result), Result= 'Yes' -> Stuff ; function2(H,T,NT), Stuff2... ) ; Stuff3. 我的问题是,在条件子句中,H和T变量似乎不可见(它
[H | T]
function1(H,T),
check(H,T,Result),
Result= 'Yes' ->
Stuff
;
function2(H,T,NT),
Stuff2...
)
;
Stuff3.
我的问题是,在条件子句中,
H
和T
变量似乎不可见(它们被视为新变量)。我的问题是:如何使它们可见?按照您编写代码的方式(对省略的部分进行一些假设),您的代码被解释为
( function1(H,T),
check(H,T,Result),
Result= 'Yes' ->
Stuff
;
function2(H,T,NT),
Stuff2...
)
这将导致函数1在函数2执行之前被撤消。也许你想要的是
function1(H,T),
check(H,T,Result),
( Result= 'Yes' ->
Stuff
;
function2(H,T,NT),
Stuff2...
)
逗号绑定比分号强,因此始终在if-then-else或析取周围使用括号,并确保它们具有正确的范围。按照您编写它的方式(对省略的部分进行一些假设),您的代码被解释为
( function1(H,T),
check(H,T,Result),
Result= 'Yes' ->
Stuff
;
function2(H,T,NT),
Stuff2...
)
这将导致函数1在函数2执行之前被撤消。也许你想要的是
function1(H,T),
check(H,T,Result),
( Result= 'Yes' ->
Stuff
;
function2(H,T,NT),
Stuff2...
)
逗号绑定比分号强,因此始终在if-then-else或析取之间使用括号,并确保它们具有正确的范围。我不清楚您显示的是什么代码。这是在谓词内部吗?还有一个不平衡的括号。所示的
H
和T
在您显示的序列中应该是“相同的”。你可能需要更多地解释你所看到的。你能发布一篇文章吗?或者至少是规则的负责人?我不清楚你在显示什么代码。这是在谓词内部吗?还有一个不平衡的括号。所示的H
和T
在您显示的序列中应该是“相同的”。你可能需要更多地解释你所看到的。你能发布一篇文章吗?或者至少是规则的领导者?好的接球(+1)。在第一种情况下,在不插入“if-then-else”子句的情况下,Prolog将回溯ifResult='Yes'
失败,并且在check
生成'Yes'的Result
之前不会执行“if”。捕捉良好(+1)。在第一种情况下,在不插入“if-then-else”子句的情况下,Prolog将回溯ifResult='Yes'
失败的情况,并且在check
生成'Yes'的Result
之前不会执行“if”。