Prolog 字符串_upper/2的替代方案
由于某种原因,我的代码应该使用的机器不知道谓词Prolog 字符串_upper/2的替代方案,prolog,swi-prolog,Prolog,Swi Prolog,由于某种原因,我的代码应该使用的机器不知道谓词string\u upper/2。还有其他选择吗?最后,这个谓词的代码是什么样子的?将字符串分解为字符代码列表。然后,如果需要,在重构字符串之前,将这些代码转换为适当的大写代码。更完整的答案需要知道您使用的是哪一个prolog,它的可用谓词,以及它如何表示字符串 您可能希望了解不同的Prolog对字符、Unicode和字符串的处理。为此,SWI Prolog实现提供了一些很好的文档: 传统(爱丁堡)、ISO和SWI prolog如何处理字符: IS
string\u upper/2
。还有其他选择吗?最后,这个谓词的代码是什么样子的?将字符串分解为字符代码列表。然后,如果需要,在重构字符串之前,将这些代码转换为适当的大写代码。更完整的答案需要知道您使用的是哪一个prolog,它的可用谓词,以及它如何表示字符串
您可能希望了解不同的Prolog对字符、Unicode和字符串的处理。为此,SWI Prolog实现提供了一些很好的文档: 传统(爱丁堡)、ISO和SWI prolog如何处理字符: ISO和SWI序言如何支持Unicode
SWI如何拥有使用引号表示的特定字符串类型对象:您在注释中给出的示例实际上不是字符串,而是一对原子。由于您已经选择使用
upcase\u atom/2
,在您从帖子中删除的代码中,我要指出,这个内置函数只在一个方向上起作用,即如果第一个参数是原子的。考虑下面的查询:
?- upcase_atom(bo,'BO'). % Is 'BO' the uppercase version of bo?
true. % Yes, it is.
?- upcase_atom(bo,B). % What's the uppercase version of bo?
B = 'BO'. % It's 'BO'
?- upcase_atom(B,'BO'). % What atom has 'BO' as uppercase version?
ERROR: upcase_atom/2: Arguments are not sufficiently instantiated
?- upcase_atom(B,1). % What atom has 1 as uppercase version?
ERROR: upcase_atom/2: Arguments are not sufficiently instantiated
从已删除代码中的示例查询是?-divideIt(a-b)。
。原子a
与规则divideIt/1
头部的变量V
统一。然后Prolog调用第一个目标upcase\u atom(V,ve)
,该目标必须失败,因为atomve
不是atoma
的大写版本。因此,您的示例查询也会失败。如果对谓词应用以下细微更改,则会产生所需的结果:
divideIt(V-W) :-
upcase_atom(V,Ve), % <- Ve (=variable) instead of ve (=atom)
write(Ve),
write('-'), % <- '-' instead of "-"
upcase_atom(W,We), % <- We (=variable) instead of we (=atom)
write(We).
?- divideIt(a-b).
A-B
true.
divideIt(V-W):-
upcase_atom(V,Ve),%我的字符串看起来像a-b
。实际上我不确定那是不是一根绳子。这是什么机器?什么序言?