如何在Picat中捕获“解决”失败?

问题描述 投票:0回答:1

我有一个包含

solve
调用的谓词。当它没有解决方案时,它会抛出
*** error(failed,main/0)
。是否可以捕获此错误?阅读示例文件
exs.pi
我认为以下内容可以做到这一点,但事实并非如此。

import sat.
main =>
    catch(unsatisfiable,E,$handler(E)).
    
handler(_) => printf("Failed").

unsatisfiable =>
    {A,B} :: 1..2,
    A+B #= 1,
    solve({A,B}).

我使用的是Picat 3.6版本。

exception constraint-programming picat
1个回答
0
投票

在写这个问题时,我做了一些更多的实验,并意识到

solve
只是一个谓词,例如比较运算符,因此可以放入
if
语句中,如下所示:

import sat.
main =>
    if unsatisfiable then
        S = "Success"
    else
        S = "Failed"
    end,
    printf(S).

unsatisfiable =>
    {A,B} :: 1..2,
    A+B #= 1,
    solve({A,B}).
© www.soinside.com 2019 - 2024. All rights reserved.