【问题标题】:How can I convert uppercase input to the lowercase?如何将大写输入转换为小写?
【发布时间】:2019-01-08 16:03:31
【问题描述】:

我有一个带有两个参数的谓词,其中第一个参数可以是复合参数,第二个参数始终是 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). 的方法
但这似乎不是正确的方法。我将不胜感激。

【问题讨论】:

标签: prolog case-conversion


【解决方案1】:

因此,您需要了解事物的结构,最简单的方法是使用 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) 

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 1970-01-01
    • 2013-07-16
    • 2011-07-21
    • 2020-05-29
    • 2022-01-24
    • 2013-02-04
    • 2011-10-29
    • 2023-03-14
    相关资源
    最近更新 更多