大家好,我再次來這裏,這一週,我得到這個作業:水仙花數在序言
我應該找到所有10
和10000
具有類似於下面的示例屬性之間的數字:
89 = 8^1 + 9^2
2427 = 2^1 + 4^2 + 2^3 + 7^4 = 2 + 16 + 8 + 2401
我有這個在Haskell實現的,它工作得很好(我認爲),並返回一個像這樣的列表:
[89,135,175,518,598,1306,1676,2427]
,然後我試着寫P中rolog(如需要太多)像下面這樣:
num(0).
num(1).
num(2).
num(3).
num(4).
num(5).
num(6).
num(7).
num(8).
num(9).
allNarc(X):- num(A),num(B),num(C),num(D),
X = A*1000+B*100+C*10+D,Y = A**1+B**2+C**3+D**4,
X =:= Y,X>10.
allNarc(X):- num(B),num(C),num(D),
X = B*100+C*10+D,Y = B**1+C**2+D**3,
X =:= Y,X>10.
allNarc(X):- num(C),num(D),
X = C*10+D,Y = C**1+D**2,
X =:= Y,X>10.
的結果是這樣的:
?- allNarc(X).
X = 1*1000+3*100+0*10+6 ;
X = 1*1000+6*100+7*10+6 ;
X = 2*1000+4*100+2*10+7 ;
X = 0*100+4*10+3 ; <- 43
X = 0*100+6*10+3 ; <- 63
X = 1*100+3*10+5 ;
X = 1*100+7*10+5 ;
X = 5*100+1*10+8 ;
X = 5*100+9*10+8 ;
X = 8*10+9 ;
false.
明確43
和64
不應該屬於這個羣體,其結果僅僅是難看,任何人都可以幫助我在Haskell實現中獲得輸出結果?
嘿非常感謝,我只是自己想出了這件事。我更喜歡使用'setof'來得到像我的haskell程序一樣的確切列表。 – bearzk 2011-06-07 22:23:22