2011-10-18 64 views

回答

1

number/1會告訴你,如果一個對象是一個數字。 atom/1會告訴你,如果一個對象是一個原子,我認爲這是你的意思是一個字符串。如果你的意思是一個真正的字符串(字符代碼列表),那麼

string(Object) :- 
    forall(member(X, Object), number(X)) 

將做的伎倆。

所有這些都會在變量出現時失敗。

+0

更好的命名,在答案的開始看到「對象」,能be:forall(member(X,List),number(X)) – CapelliC

+0

@chac:我不完全明白你在說什麼,但是你的想法是,你可以將'forall'應用到列表的*元素* OP指的是(因爲Prolog中的字符串實際上是列表本身)。 –

+0

有效地,我沒有理解你的線索,謝謝你的解釋。 – CapelliC

0

如果列表中包含要讀成數字的字符串:

...maplist(convert_element, List, OnlyNumbers), 

convert_element(Num, Num) :- number(Num). 
convert_element(String, Num) :- number_codes(Num, String). 
convert_element(Unknown, 0) :- throw(unknown(Unknown)). 

throw可以用一條消息來替代......

+0

目標'convert_element(1,N)'用'N = 1'成功,但最終會在失敗時產生錯誤'unknown(1)'。你想要一些有條件的構造或否定來解決這個問題。 – false

相關問題