2012-12-16 98 views
0

我是在Prolog的一個新的,我已經有一些問題了解,事情 是,我是通過附加控制檯引入了一些字符串進行測試:追加字符串列表在序言

append_str([],Adder,Adder). 
append_str([Head|Tail],Adder,Result):- 
    append_str(Tail,[Head|Adder],Result). 

sread_str(String):- 
    read(String), 
    atom(String). 

sinput:- 
    sinput_str([]). 

sinput_str(Lista):- 
    sread_str(String), 
    sinput_str([String|List]). 

sinput_str(List):- 
    append_str(List,[],Result), 
    nl, 
    display(Result), 
    nl. 

而且最終總是得到這個輸出:

|-? sinput. 
sinput. 
hello. 
hello. 
world. 
world. 
9. 
9. 

'.'(hello,'.'(world,[])) 

的數量僅僅是控制檯結束詢問一些更多的價值,我不知道什麼是錯的,謝謝你們提前。

回答

0

您應該嘗試瞭解當輸入數字時會發生什麼,強制 sread_str失敗。

Prolog探索了所有可用的替代方法來證明給定的目標,並且這樣做改變了這些變量,撤消這樣的變化,當一個路徑失敗。這種模式由於IO(讀取/顯示內置)所需的副作用而變得複雜。

然後嘗試首先要有一個工作 sinput_str,像這樣

sinput_str([String|List]):- 
    sread_str(String), 
    sinput_str(List). 
sinput_str([]).