Prolog 变量在条件子句中看不到

Sim*_*mon 1 debugging prolog

我正在 Prolog 中进行一个项目,我偶然发现了一个问题:

假设我正在处理一个列表[H|T]

    function1(H,T),
    check(H,T,Result),
    Result= 'Yes' -> 
        Stuff
        ;

         function2(H,T,NT),
                     Stuff2...

    )
    ; 
    Stuff3.
Run Code Online (Sandbox Code Playgroud)

我的问题是,条件子句中的HT变量似乎不可见(它们被视为新变量)。我的问题是:如何让它们可见?

jsc*_*mpf 5

按照您编写的方式(对您省略的部分做出一些假设),您的代码被解释为

( function1(H,T),
  check(H,T,Result),
  Result= 'Yes' -> 
    Stuff
;

    function2(H,T,NT),
    Stuff2...
)
Run Code Online (Sandbox Code Playgroud)

这将导致 function1 的效果在 function2 执行之前被撤销。也许你想要的是

function1(H,T),
check(H,T,Result),
(  Result= 'Yes' -> 
    Stuff
;

    function2(H,T,NT),
    Stuff2...
)
Run Code Online (Sandbox Code Playgroud)

逗号的结合力比分号更强,因此请始终在 if-then-else 或析取语句周围使用括号,并确保它们具有正确的范围。