Re: [問題] 1-9位數不重複印出來 (Prolog)

看板Programming作者 (高貴恐龍)時間7年前 (2017/03/07 19:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
我又來貼了,這次是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
文章代碼(AID): #1OlfQ_CM (Programming)