Prolog中谓词的返回值

时间:2021-01-16 16:57:15

标签: prolog

我是 prolog 的新手,我需要帮助了解返回值的工作原理。 我知道要么是

pred(Y, X) :- X is Y. 

所以当给出输入

?- pred(5, X).

输出是: X = 5.

或者当输入是

?- pred(5,5).

我们得到: true .

现在我想从如下所示的谓词中获取第一个输出:

main_pred(List, RES) :-
sort(List, SortedList),
check(SortedList).

RES 应该是 T(如果 check(SortedList) 为真)或 N(如果 check(SortedList) 为假)。 现在我的结果只是真/假,但我想得到 RES = T/N

有可能吗? 谢谢

2 个答案:

答案 0 :(得分:2)

当检查成功时,返回 RES 等于 true 的第二个参数

main_pred(List, true) :-
    sort(List, SortedList),
    check(SortedList), !.    
main_pred(List, false).

否则返回 RES=false。更直接:

main_pred(List, RES) :-
    sort(List, SortedList),
    (check(SortedList) -> RES=true; RES=false).

用您想要的值 (T/N) 替换真/假。这是否回答了您的问题?

答案 1 :(得分:1)

1- main_pred 谓词采用列表 ([1,2,3]),检查它是否已排序。

2-如果是有序的,返回RES=true,否则返回RES=false

注意:我已经评论了 sort,因为如果我们使用它,那么它总是会返回 RES=true

main_pred(List, RES) :-
%sort(List, SortedList),
(ordered(List)->
    RES='true';
    RES='false').

ordered([]) .
ordered([_]) .
ordered([X,Y|Z]) :- X =< Y , ordered( [Y|Z] ),!.

示例:

?-main_pred([1,3,5],Res).
Res = true

?-main_pred([1,4,2],Res).
Res = false