Re: [问题] 1-9位数不重复印出来 (Prolog)

楼主: NobleDino (高贵恐龙)   2017-03-07 19:17:10
我又来贴了,这次是Prolog,而我喜欢叫他逻辑指令,
GNU Prolog: http://www.gprolog.org/
Prolog的特色是你透过逻辑的指令来解决问题,
指令只会在定义的所有条件都是true的时候执行,
先来看看:
unique(X) :-
This_number is 10 ^ X,
format('Parse 1-~w~n', [This_number]),
list_of_1_to_number(List, This_number),
parse_unique(List).
list_of_1_to_number(Out, End) :-
findall(N, between(1, End, N), Out).
parse_unique([]) :- halt.
parse_unique([Head|Tail]) :-
print_unique(Head),
parse_unique(Tail).
print_unique(X) :-
number_chars(X, C),
sort(C, D),
length(C, N),
length(D, N),
format('~w~n', [X]).
print_unique(_).
使用:
[unique].
unique(3).
在print_unique(X)的指令中,sort会建立一个没有重复资料的列表,
这时两个指令length()中的变量 N必须一样,这个指令才会继续执行。
Ex: print_unique(55) 不符合规则,
C 和 D 会是 [5, 5] 和 [5],N 无法同时等于这两个长度,
Prolog 接着就会自动寻找其他print_unique,
然后他就找到print_unique(_),便不执行印出的动作。

Links booklink

Contact Us: admin [ a t ] ucptt.com