2014-09-30 38 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