我有一个输入谓词会将文件作为列表读取: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
可能位于另一个位置,或者列表可能具有不同的大小。有人可以帮帮我吗?
答案 0 :(得分:1)
to_var_list([],[]).
to_var_list([A|R1],[B|R2]):-
(A = '_' ->
true;
A = B),
to_var_list(R1,R2).
如果您实际上有一个字符串而不是下划线原子,请与'_'
交换"_"
。
此外,还有一个read
谓词可以执行您想要实现的操作,但它需要在文件中列出.
之后。