2014-12-06 85 views
0

我參加了一門編程課程,教授只是因爲時間不夠而輕率地瀏覽Prolog。無論如何,他建議我們自己研究一下。我遇到了一個應該計算的密碼算法程序? AM + PM = DAY。我不知道應該在SWI解釋器中添加什麼作爲輸入,以及應該如何接收正確的輸出......如果這有什麼意義?Prolog密碼算法程序

我想...

solve([AM],[PM],[DAY]). 

,什麼也不做。對於AM + PM = DAY或類似的東西,正確的輸入將會很棒!這是我與播放節目...

solve([A,M,P,D,Y]):- 
    select(A,[0,1,2,3,4,5,6,7,8,9],WA), % W means Without 
    not(A=0), 
    select(M,WA,WMA), 
    select(P,WMA,WMAP), 
    not(P=0), 
    select(D,WMAP,WMAPD), 
    not(D=0), 
    select(Y,WMAPD,WMAPDY), 
    DAY is 100*D+10*A+Y, 
    AM is 10*A+M, 
    PM is 10*P+M, 
    DAY is AM+PM. 

請記住,我們只有兩個班的Prolog的,所以我旁邊知道什麼!

斯科特

+0

嘗試'solve(X)',它給出了在長度爲5的列表中的A',M',P,D和Y的可能結果。 – 2014-12-07 00:39:35

+0

Ok ....所以給了我這個X = [2,5,9,1,0]。那究竟是什麼意思?這是如何解決AM + PM = DAY? Prolog很奇怪!哈哈 – NoobCoderChick 2014-12-07 00:50:52

+0

嘗試解決([A,M,P,D,Y]),希望有所幫助。如果你說出你不瞭解的東西會更容易。如果你按空間,你會得到其他的。 – 2014-12-07 02:32:08

回答

1

好,這個程序將給出一個變量賦值爲式

DAY = AM + PM 

當每個字符是從09一個數字沒有,數字可以進行兩次和A使用PD不得爲0(不允許前導零)。

對於試圖理解prolog程序的初學者來說,提問這個問題「它是如何(程序)是真實的」而不是「什麼輸入生成哪個輸出」可能更爲可行。 Prolog樂意爲您提供所需的可變設置,以便爲您提供true。 (它也跟蹤它可能以另一種方式走的路,所以可以再問一次)。

該程序使用模式匹配,但基本上希望五行代表變量AMPDY(以該順序)的列表。

select的論點是:

  1. 東西(你可以在列表中放)
  2. 包含的第一個參數
  3. 沒有第一個參數列表清單。

not試圖解決它給出的內容,如果成功則失敗。

,是一個很短的cirquiting,並且像很多類似C語言的&&一樣。

最後四行是簡單的算術,而上面的行只是確保你沒有選擇雙打和領導0 s。

所以你加載你的程序後,可以查詢答案:

?- solve([A, M,P,D,Y]). 
A = 2, 
M = 5, 
P = 9, 
D = 1, 
Y = 0 

如果想要另一個解決方案,你可以打空間;。如果你想知道,如果沒有與A = 5一個解決方案,您可以查詢這樣的:

?- A = 5, solve([A, M,P,D,Y]). 
A = 5, 
M = 6, 
P = 9, 
D = 1, 
Y = 2 

如果你想「重組」了,此行可能會有所幫助:

?- solve([A, M,P,D,Y]), format('~w~w~w= ~w~w + ~w~w~n', [D,A,Y,A,M,P,M]). 

format是像其他許多語言中的printf一樣。

+0

這回答了我的問題帕特里克!感謝您耐心解釋! – NoobCoderChick 2014-12-07 04:55:41