Re: [問題] 1-9位數不重複印出來 (Prolog)
我又來貼了,這次是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(_),便不執行印出的動作。
--
推 NobleDino: 雛田的ㄋㄟㄋㄟ讚 04/03 01:30
推 STRO: 樓上,你再說一次看看 04/03 01:35
推 WuColn: 雛田的ㄋㄟㄋㄟ 04/03 01:35
推 richmond1223: 讚 04/03 01:38
推 STRO: Gi Joe~~~~~ 04/03 01:58
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 73.71.217.229
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1488885439.A.316.html
Programming 近期熱門文章
PTT數位生活區 即時熱門文章