2013-11-09 67 views
3

如何在Prolog中打印偶數?這是我的代碼打印的數字從3到1:怎麼使用MULT沒有(*)在anthor例如:使用prolog打印偶數:

predicates 
    count(integer). 
clauses 
    count(1) :- write(1), nl, !. 
    count(X) :- X > 1, write(X), nl, X1 = X-1, count(X1), !. 
+1

如果你想打印偶數,這個'X> 1,寫(X)'是非常錯誤的。它會打印任何大於X的數字,其中包括3 – Shevliaskovic

回答

1

我怎樣才能在序言

?- between(1, 3, X), X mod 2 =:= 0. 
X = 2. 
1
僅打印偶數

ДМИТРИЙМАЛИКОВ做了一個很好,簡潔的方法。下面只是一個建立在已啓動的辦法:

predicates 
    count(integer). 

clauses 
    count(X) :- 
     X /\ 1 =:= 1, !, % Using bitwise AND (/\) to check for odd 
     X1 is X - 1, 
     count(X1). 
    count(X) :- 
     X > 1, 
     write(X), nl, 
     X1 is X - 2, 
     count(X1). 

| ?- count_even(7). 
6 
4 
2 

我用按位與(/\)檢查該號碼的奇偶性只是爲了說明的不同方法。 mod運營商的工作也是如此。

請注意,對於序言中的算術表達式分配,您需要is而不是=is將計算右側的表達式並將結果統一到左側的未被實例化的變量。 =不會評估表達式。

+0

mbratch,你在整數(X)中的含義是什麼,X/1請幫助我,因爲我是Tyro在序言編程 – eleen

+0

中發現此錯誤(未聲明謂詞或拼寫錯誤)並指向整數(X) – eleen

+0

@eleen抱歉,「整數」必須是特定於某些序言解釋器的。我使用GNU,它有'integer'。我剛剛刪除它。這是一個防守檢查,以確保一個整數通過。由於您使用Turbo Prolog並將類型聲明爲「整數」,因此您並不需要它。 – lurker