Prolog 转换为大写字母
Prolog Conversion to uppercase letters
好的,我想问一下有没有什么办法可以不加“”就把小写字母改成大写字母。对不起,如果这听起来很傻,但我需要它 运行 另一个程序。我写了这样的东西:
change(~A,X):-
upcase_atom(A,D),
X = false-D.
我需要输出如下所示:
X=false-P
但它看起来像这样:
X=false-"P"
非常感谢您的帮助!
Note 1: A functor/predicate cannot contain a hyphen (-
). You can "resolve" the issue by for instance using an underscore (_
).
Node 2: Building on that, if you write false_X
, it will see false_X
as an entire atom, so the X
will not bound to the declared X
.
Note 3: You should declare ~
an operator, otherwise Prolog will error in this.
根据这两条评论,您可以使用 atom_concat/3
轻松解决问题:
<b>:- op( 1200, fx, [~]).</b>
change(~A,X):-
upcase_atom(A,D),
<b>atom_concat</b>(false<b>_</b>,D,X).
第一行声明 ~
一个带有一个参数的运算符(写成 f x
),优先级为 1200。如果这样写,查询会产生:
?- change(~(foo),X).
X = false_FOO.
?- change(~foo,X).
X = false_FOO.
好的,我想问一下有没有什么办法可以不加“”就把小写字母改成大写字母。对不起,如果这听起来很傻,但我需要它 运行 另一个程序。我写了这样的东西:
change(~A,X):-
upcase_atom(A,D),
X = false-D.
我需要输出如下所示:
X=false-P
但它看起来像这样:
X=false-"P"
非常感谢您的帮助!
Note 1: A functor/predicate cannot contain a hyphen (
-
). You can "resolve" the issue by for instance using an underscore (_
).Node 2: Building on that, if you write
false_X
, it will seefalse_X
as an entire atom, so theX
will not bound to the declaredX
.Note 3: You should declare
~
an operator, otherwise Prolog will error in this.
根据这两条评论,您可以使用 atom_concat/3
轻松解决问题:
<b>:- op( 1200, fx, [~]).</b>
change(~A,X):-
upcase_atom(A,D),
<b>atom_concat</b>(false<b>_</b>,D,X).
第一行声明 ~
一个带有一个参数的运算符(写成 f x
),优先级为 1200。如果这样写,查询会产生:
?- change(~(foo),X).
X = false_FOO.
?- change(~foo,X).
X = false_FOO.