1['D:/GK.2010.83a.pl'].
xxxxxxxxxx11halt.
xxxxxxxxxx21/* print hello world */2go :- write("hello world").
注释:/* */, 或行注释: %, 结束用"."来表示。
运行结果
xxxxxxxxxx31?- go.2hello world3true.
xxxxxxxxxx31dog(jack). dog(cathy).2cat(rose). cat(mike).3animal(X):-dog(X).
语句(clauses)包括事实(facts)或规则(rules)两类。
例如:dog(fido)是事实, animal(X):-dog(X)是规则。
在dog(fido)中,dog是谓词(predicate), fido是实参(argument).
在animal(X):-dog(X)中,X是变量(variable). Prolog通过问问题(query)来执行。
xxxxxxxxxx21?- animal(jack).2true.
"?-"后面就是目标问题 (goal). 这里prolog会回答两种结果:true或false.
也可以带着变量问
xxxxxxxxxx31?- animal(X).2X = jack ;3X = cathy.
变量用首字母大写的串来表示,事实首字母必须小写。
Prolog找到一个答案后,会回头重新找下一个答案, 多个答案用分号隔开。
有些内置的谓词可直接用作goal.
x1?- listing(dog).2dog(jack).3dog(cathy).45true.
目标中可以含多个询问,用","隔开表示"与"的关系。
xxxxxxxxxx91?- dog(X),cat(Y).2X = jack,3Y = rose ;4X = jack,5Y = mike ;6X = cathy,7Y = rose ;8X = cathy,9Y = mike.
数: 234, 23.4
字符串: 'Hello World', nl是回车换行
函数: likes(jack,rose)
变量: X,Y,Z
List: [a,[b,c,d],e,f]
有一些内置的常数,如:pi, e, inf.
操作符的定义
xxxxxxxxxx11:- op(500,xfx,'is_parent').
尽管一般是这么使用
xxxxxxxxxx11m is_parent t.
但也等同于谓词:
xxxxxxxxxx21?- is_parent(m,t).2true.
常见的算术操作符有: +,-,*,/, //, ^,abs(X),max(X,Y),sqrt(X).
xxxxxxxxxx21?- 1 =:= sin(pi/2).2true.
常见的逻辑操作符有:not, ";", ","
输入:
xxxxxxxxxx41sayhi :-2write('What is your name ?'),nl,3read(X),4write('Hi '),tab(2), write(X).
运行结果是
xxxxxxxxxx51?- sayhi.2What is your name ?3|: 'Hui Li'.4Hi Hui Li5true.
又如
xxxxxxxxxx81square :-2write('Please input a Num: '),3read(Num),4do(Num).5do(stop) :- !.6do(Num) :-7S is Num * Num,8write('Square of '),write(Num),write(': '),write(S),nl, square.
运行结果是
xxxxxxxxxx61?- square.2Please input a Num: 5.3Square of 5: 254Please input a Num: |: stop.56true.
输出: write
输出ASCII码:
xxxxxxxxxx412?- put(37),nl.3%4true.
读取每一项
xxxxxxxxxx21writeall([]).2writeall([A|L]):- write(A),nl,writeall(L).
xxxxxxxxxx61?- writeall([i,'love','Beijing',[tian,an,men]]).2i3love4Beijing5[tian,an,men]6true.
内置谓词
xxxxxxxxxx111?- append([a,b,c],[1,2,3],L).2L = [a, b, c, 1, 2, 3].34?- member(a,[a,b,c]).5true .67?- length([a,b,c],X).8X = 3.910?- reverse([a,b,c],X).11X = [c, b, a].
字符串与List的转换
xxxxxxxxxx41?- name('helloworld',L).2L = [104, 101, 108, 108, 111, 119, 111, 114, 108|...].34?- name(X,[104,101,108,108,111,119,111,114,108,100]).X = helloworld.
借助List操作实现字符串操作
xxxxxxxxxx41joinNew(Str1,Str2,Str3):-2name(Str1,L1),name(Str2,L2),3append(L1,L2,Result),4name(Str3,Result).
xxxxxxxxxx21?- joinNew('hello',' world',X).2X = 'hello world'.