优化Prolog脚本

时间:2016-09-24 12:22:26

标签: list prolog

我是Prolog的新手,我们在大学里使用,并且有人要求定义一个圣徒,我写了一个快速的脚本来回答要求:

    % List of Saints taken from https://en.wikipedia.org/wiki/List_of_saints

    % Rule to define sainthood
    saint(X) :-
       human(X),
       has_faith(X),
       died(X),
       made_miracles(X).

    % List of humans
    human('Abadiu of phoenix').
    human('Abakuh').
    human('Abamun of Tarnut').
    human('Saint Phoenix').
    human('Fabrizio').
    human('Bob').

   % List of believer
   has_faith('Abadiu of phoenix').
   has_faith('Abakuh').
   has_faith('Abamun of Tarnut').
   has_faith('Saint Phoenix').
   has_faith('Bob').

   % List of died
   died('Abadiu of phoenix').
   died('Abakuh').
   died('Abamun of Tarnut').
   died('Saint Phoenix').

   made_miracles('Abadiu of phoenix').
   made_miracles('Abakuh').
   made_miracles('Abamun of Tarnut').
   made_miracles('Saint Phoenix').

但是我想在改进代码和学习Prolog的同时使用:

human(X,['Abadiu of phoenix','Abakuh','Abamun of Tarnut','Saint Phoenix','Fabrizio']).

human(['Abadiu of phoenix','Abakuh','Abamun of Tarnut','Saint Phoenix','Fabrizio']).

为了创建一个人类阵列但没有成功,我需要查看哪些内容才能改进上述代码?

1 个答案:

答案 0 :(得分:1)

我也是Prolog的新手,但我想你需要never | string

鉴于以下事实

condition ? throw Error("WTF") : "Ecma Scriptus MMXV"

您可以定义以下条款

findall/3

% List of humans human('Abadiu of phoenix'). human('Abakuh'). human('Abamun of Tarnut'). human('Saint Phoenix'). human('Fabrizio'). human('Bob'). 中统一列表humanList(L) :- findall(U, human(U), L).

p.s。:你称之为“数组”,在Prolog中被称为“列表”