List 在其';原始的'/2格式

List 在其';原始的'/2格式,list,prolog,List,Prolog,是否可以以./2格式显示序言列表,例如 名单如下: | ?- L=[a,b,c]. L = [a,b,c] ? yes 是否有方法显示: L = .(a, .(b, .(c, []))). 通常情况下,write\u canonical(List)或?-如注释中所指出,write\u term(List,[引用(true),忽略操作(true)])。由于SWI Prolog决定,这还不够好: ?- write_canonical([a]). [a] true. ?- write_term

是否可以以./2格式显示序言列表,例如

名单如下:

| ?- L=[a,b,c].
L = [a,b,c] ? 
yes
是否有方法显示:

L = .(a, .(b, .(c, []))).

通常情况下,
write\u canonical(List)
?-如注释中所指出,write\u term(List,[引用(true),忽略操作(true)])
。由于SWI Prolog决定,这还不够好:

?- write_canonical([a]).
[a]
true.

?- write_term([a], [quoted(true), ignore_ops(true)]).
[a]
true.

?- write_term([a], [dotlists(true)]).
.(a,[])
true.
请参阅,注意选项
brake\u terms(Bool)
dotlists(Bool)
。但是要注意:如果您正常启动SWI Prolog 7,
/2
不再是列表函子

?- L = .(a, []).
ERROR: Type error: `dict' expected, found `a' (an atom) % WHAT?

?- L = '[|]'(a, []).
L = [a].
如果您以
swipl——传统的
开始,事情就会恢复正常,有点:

$ swipl --traditional
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.3.4-32-g9311e51)
Copyright (c) 1990-2015 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

?- L = .(a, []).
L = [a].
您仍然不能使用
write\u canonical(List)
write\u term(List,[引用(true),忽略操作(true)])


阅读SWI Prolog文档的链接部分,了解详细信息和基本原理。作为建议,如果您决定使用SWI Prolog,请使用默认的SWI Prolog 7,如果您需要与另一个Prolog实现通信,请仅使用
write_term(List,[dotlists(true)])
。通常的列表表示法,
[a,b,…]
在大多数常规情况下应该足够好。

在任何符合ISO标准的系统中检查
write\u canonical/1
<代码>编写规范/1
在您每次对所推理的术语的确切形式有疑问时都非常有用。SICStus序言示例:
?-编写规范([a,b,c])。
,yieding:
。。(a),(b),。(c,[]))
。对于数据交换来说也是非常有价值的谓词,旨在产生一个真正的规范表示,它很容易解析。L=[a,b,c],write_canonical(L)。真是太棒了!我现在正在使用sicstus,有时在家使用swi。我想知道是否还有其他方法可以达到同样的目的?
write_canonical/1
是实现这一目标的标准和最佳方法。当然,您也可以自己实现这一点,使用术语检查和分解与
arg/3
=../2
等一起使用。您也可以说
write_term(L,[quoted(true),ignore_ops(true)]。