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.