如何将大写输入转换为小写?
How can I convert uppercase input to the lowercase?
我有一个带两个参数的谓词,其中第一个参数可以是复合参数,第二个参数始终是 B。我还定义了一些新的运算符,例如 +和 &.
pvc(A, B) :- somestuff(A, B).
用户可以在此处键入类似 pvc((x+y)&(A+b), B)
.
的内容
作为 Prolog 的初学者,我想做的是将复合 A
转换为全小写,然后用新的 AN
调用 somestuff
。所以应该是 somestuff((x+y)&(a+b), B)
.
我尝试了类似 pvc(A, B) :- downcase_atom(A,AN),somestuff(AN, B).
但它似乎不是正确的方法。我将不胜感激任何帮助。
因此,您需要归纳事物的结构,最简单的方法是使用 univ 运算符 =../2
。首先处理你的基本情况,你这样做了:
downcase_compound(A, B) :- atom(A), downcase_atom(A, B).
现在您将拆开结构并使用 univ 在其上归纳:
downcase_compound(A, B) :-
compound(A),
A =.. [Functor|Args],
downcase_compound(Functor, DowncaseFunctor),
maplist(downcase_compound, Args, DowncaseArgs),
B =.. [DowncaseFunctor|DowncaseArgs].
这里的诀窍是简单地将您的化合物分解成您可以使用的位,然后递归调用这些位 downcase_compound/2
。查看实际效果:
?- downcase_compound((x+y,('A'+b)), X).
X = (x+y, a+b)
我有一个带两个参数的谓词,其中第一个参数可以是复合参数,第二个参数始终是 B。我还定义了一些新的运算符,例如 +和 &.
pvc(A, B) :- somestuff(A, B).
用户可以在此处键入类似 pvc((x+y)&(A+b), B)
.
的内容
作为 Prolog 的初学者,我想做的是将复合 A
转换为全小写,然后用新的 AN
调用 somestuff
。所以应该是 somestuff((x+y)&(a+b), B)
.
我尝试了类似 pvc(A, B) :- downcase_atom(A,AN),somestuff(AN, B).
但它似乎不是正确的方法。我将不胜感激任何帮助。
因此,您需要归纳事物的结构,最简单的方法是使用 univ 运算符 =../2
。首先处理你的基本情况,你这样做了:
downcase_compound(A, B) :- atom(A), downcase_atom(A, B).
现在您将拆开结构并使用 univ 在其上归纳:
downcase_compound(A, B) :-
compound(A),
A =.. [Functor|Args],
downcase_compound(Functor, DowncaseFunctor),
maplist(downcase_compound, Args, DowncaseArgs),
B =.. [DowncaseFunctor|DowncaseArgs].
这里的诀窍是简单地将您的化合物分解成您可以使用的位,然后递归调用这些位 downcase_compound/2
。查看实际效果:
?- downcase_compound((x+y,('A'+b)), X).
X = (x+y, a+b)