【问题标题】:Returning value of the predicate in PrologProlog中谓词的返回值
【发布时间】:2021-01-16 16:57:15
【问题描述】:

我是 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).

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

有可能吗? 谢谢

【问题讨论】:

    标签: prolog


    【解决方案1】:

    检查成功后,返回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).
    

    将 true/false 替换为您想要的值 (T/N)。这是否回答了您的问题?

    【讨论】:

      【解决方案2】:

      1- main_pred 谓词接受一个列表 ([1,2,3]),检查它是否有序。

      2-如果已订购,则返回RES=true,否则返回RES=false

      注意:我已经注释了排序,因为如果我们使用它,那么它总是会返回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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多