2014-09-30 68 views
0

我有一個輸入謂詞會將這個文件讀作一個列表:input(Filename,List)。然後,名單將在Prolog - 如何從輸入文件中給出列表中的變量列表?

["_","_","_",9,"_","_"]

"_"格式是字面上的性格強調"_"這裏,不是通配符。問題是如何編寫predicate pred(List,List2),然後將所有"_"轉換爲變量,但仍將9保持在同一位置?所以,如果我在

input(Filename,List),pred(List,X).

型我會得到什麼樣

X = [_G1426, _G1429, _G1432, 9, _G1438, _G1441]. 

我知道,如果我定義了一個謂語

pred(a,[_,_,_,9,_,_]).

然後通過調用pred(a,X)我可以有類似的結果。但問題是如何使其適應各種輸入列表,9可能處於另一個位置,或者列表可能具有不同的大小。有人能幫助我嗎?

回答

1
to_var_list([],[]). 
to_var_list([A|R1],[B|R2]):- 
    (A = '_' -> 
     true; 
     A = B), 
    to_var_list(R1,R2). 

交易所'_'"_"如果你確實有一個字符串,而不是強調原子。 此外,還有一個read謂詞可以達到您想要達到的效果,但它會在您的文件列表中出現.之後。

+0

謝謝,它的工作原理。 – Miles 2014-10-01 06:19:37

+0

你有看過'read'嗎?它確實幾乎完全符合你的要求。 – 2014-10-01 09:24:47

+0

是的,但我不能修改輸入。輸入列表中沒有「。」最後。 – Miles 2014-10-01 13:36:51