我是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']).
为了创建一个人类阵列但没有成功,我需要查看哪些内容才能改进上述代码?
答案 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中被称为“列表”