📄 lists.pl
字号:
/*****************************************************/
/* Prolog List Processing Examples */
/*****************************************************/
my_member(X,[X|_]).
my_member(X,[_|Y]) :- my_member(X,Y).
% my_length([],0).
% my_length([_|T],N) :- my_length(T,M), N is M + 1.
my_length(List,Length) :-
my_length(List,0,Length).
my_length([],Length,Length).
my_length([_|T],Acc,Length) :-
NewAcc is Acc + 1,
my_length(T,NewAcc,Length).
smallest([H|T],S) :- smallest(T,H,S), !.
smallest([],S,S).
smallest([H|T],Acc,S) :- H < Acc, smallest(T,H,S).
smallest([H|T],Acc,S) :- smallest(T,Acc,S).
isort(L,S) :- isort(L,[],S), !.
isort([],S,S).
isort([H|T],Acc,S) :- insert(H,Acc,NewAcc),
isort(T,NewAcc,S).
insert(E,[],[E]).
insert(E,[H|T],[E|[H|T]]) :- E =< H.
insert(E,[H|T],[H|L]) :- insert(E,T,L).
% digits(+IntExpr,-List) and digits(-Int,+ListOfInt)
digits(N,D) :- integer(N), digits(N,[],D).
digits(N,D) :- var(N), value(D,0,N).
digits(N,Acc,[N|Acc]) :- N < 10, !.
digits(N,Acc,D) :- H is N mod 10,
NewN is N // 10,
digits(NewN,[H|Acc],D).
value([],N,N).
value([H|T],Acc,N) :- integer(H),
H < 10,
AccNew is H + 10 * Acc,
value(T,AccNew,N).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -