我正在做一個練習來計算數字中的偶數位數。這是該計劃。是否可以在Prolog中更改已初始化的變量?
count_even(Number, 1) :-
Number < 10,
even(Number).
count_even(Number, 0) :-
Number < 10,
odd(Number).
count_even(Number, Count) :-
Number >= 10,
split_number(Number, Digit, NewNumber),
count_even(NewNumber, NumCount),
DigCount is mod(Digit + 1, 2),
Count is NumCount + DigCount.
split_number(Number, Digit, NewNumber) :-
Digit is mod(Number, 10),
NewNumber is Number//10.
even(Number) :-
0 is mod(Number, 2).
odd(Number) :-
1 is mod(Number, 2).
現在我想知道是否真的有必要在第三count_even有一個NumCount。如果我第三count_even的代碼更改
count_even(Number, Count) :-
Number >= 10,
split_number(Number, Digit, NewNumber),
count_even(NewNumber, Count),
DigCount is mod(Digit + 1, 2),
Count is Count + DigCount.
現在該程序將無法完成其工作了,因爲如果DigCount
等於1。我的問題是,如果這樣的事情是可能Count is Count + DigCount
將失敗。是否可以強制Count is Count + DigCount
像C#或Java語言一樣執行?也就是說,只要進行計算,並且在實例化Count
的情況下不會將其視爲一條規則?
編號'Count is Count + DigCount'等價於'Count =:= Count + DigCount'。在* Prolog *中,就是。 :)有['nb_setarg'](http://www.swi-prolog.org/pldoc/doc_for?object=nb_setarg/3)和['nb_setval'](http://www.swi-prolog.org/pldoc/man?predicate = nb_setval/2)雖然... –
請不要使用prolog作爲命令式語言。事實上,prolog中沒有可以初始化的「編程變量」,但是可以統一的邏輯變量。 – rano
沒有理由在此上下文中重複使用「Count」。爲什麼不調用'count_even(NewNumber,Count1)'然後'Count是Count1 + DigCount'? – lurker