Prolog 将列表作为用户的输入,并在其他谓词中使用它,如append,以及其他一些我想要实现代码的谓词

Prolog 将列表作为用户的输入,并在其他谓词中使用它,如append,以及其他一些我想要实现代码的谓词,prolog,Prolog,代码的输出为: test():- write("list1"), read(A), write("list2"), read(B), write(A), write(B). append([],X,X). append([X|Y],Z,[X|W]) :- append(Y,Z,W).' 但是我希望它像普通的字母表一样。这个read谓词是用来阅读术语的。对于读取字符串,请改用read\u string。read谓词用于读取术语。对于读取字符

代码的输出为:

 test():-
    write("list1"),
    read(A),
    write("list2"),
    read(B),
    write(A),
    write(B).

 append([],X,X).
 append([X|Y],Z,[X|W]) :- append(Y,Z,W).'

但是我希望它像普通的字母表一样。

这个
read
谓词是用来阅读术语的。对于读取字符串,请改用
read\u string
read
谓词用于读取术语。对于读取字符串,请使用
read\u string

您正在读取术语,这意味着您要求用户在终端上输入Prolog,这意味着您在写入
[A,B,C]时。
,Prolog将其解释为三个未实例化变量的列表。这不是编码问题,如果您输入
[a,b,c].
[a','b','c'].
它将按照您的预期工作。正如@ValeraGrishin在下面所说的,如果你想要原始字符串,你必须使用
read_string/3
,但是如果你真的想要Prolog术语,你必须正确地转义大写原子。你在读术语,这意味着你要求用户在终端上输入Prolog,这意味着当你写
[A,B,C]时,Prolog将其解释为三个未实例化变量的列表。这不是编码问题,如果您输入
[a,b,c].
[a','b','c'].
它将按照您的预期工作。正如@ValeraGrishin在下面所述,如果您想要原始字符串,您必须使用
read_string/3
,但是如果您确实想要Prolog术语,您必须正确地转义大写原子。
?- test().
     list1[A,B,C].
     list2|: [D,E].
     [_3842,_3848,_3854][_3866,_3872]
     true.