我在输入中有一个列表:[asd,qweqwe,fsdf,lkasd] 从代码中我可以看到我希望连接列表的每个常量以输出单个变量列表。 我使用yap prolog,我查阅此代码,然后写道: - 运行。 写入功能打印出_G1233而不是'asd,asd2,asd3,asd4' 为什么?我如何更改输出代码'asd,asd2,asd3,asd4'?
run :- toAtomicVars([asd,asd2,asd3,asd4],',',Out),
write(Out),nl.
toAtomicVars([],In,Out).
toAtomicVars([A|B],In,Out) :-
atomic_concat(A,In,Out1),
atomic_concat(',',Out1,Out2),
toAtomicVars(B,Out2,Out2).
答案 0 :(得分:0)
你(应该)得到像
这样的警告Singleton variables: [In,Out]
Singleton variables: [Out]
这意味着你不会对这些变量做任何事情:
toAtomicVars([],In,Out).
In和Out可以是任何东西,所以prolog只打印一个虚拟值,_Gsomething意味着变量没有被实例化。
同样的事情发生在第二个条款中:
toAtomicVars([A|B],In,Out) :-
atomic_concat(A,In,Out1),
atomic_concat(',',Out1,Out2),
toAtomicVars(B,Out2,Out2).
你不会在任何地方说那是什么。
个人认为如果你只是递归地打印每个变量然后打印一个逗号会更容易,例如:print_list([X]):-
write(X).
print_list([H|T]):-
write(H),
write(', '),
print_list(T).
但是如果你想在列表中加入逗号,你应该添加一个定义Out的规则。