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