Prolog - 如何从输入文件中创建给定列表的变量列表?

时间:2014-09-30 19:12:42

标签: list variables prolog

我有一个输入谓词会将文件作为列表读取:input(Filename,List)。然后列表将采用

的格式

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

"_"字面意思是字符下划线"_",而不是外卡。问题是如何编写谓词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 个答案:

答案 0 :(得分:1)

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

如果您实际上有一个字符串而不是下划线原子,请与'_'交换"_"。 此外,还有一个read谓词可以执行您想要实现的操作,但它需要在文件中列出.之后。