2017-03-26 2 views
1

D'accord, je voulais vous demander s'il y a une façon que je pourrais changer la lettre minuscule en majuscule sans ajouter le « ». Désolé si cela sonne idiot mais j'ai besoin de cela pour lancer un autre programme. J'ai écrit quelque chose comme ceci:Prolog Conversion en majuscules

change(~A,X):- 
    upcase_atom(A,D), 
    X = false-D. 

J'ai besoin de la sortie pour ressembler à:

X=false-P 

Mais il ressemble à ceci:

X=false-"P" 

J'apprécierais vraiment votre aide!

+0

Pourquoi utilisez-vous '~' dans 'A'? –

+0

des thats un opérateur défini plus tôt et je dois changer ~ p false-P @WillemVanOnsem – polles

+0

Le problème est que quelque chose qui commence par une majuscule n'est pas un foncteur/prédicat// constante ... mais une variable. –

Répondre

0

Note 1: Un foncteur /prédicat ne peut pas contenir un trait d'union (-). Vous pouvez "résoudre" le problème en utilisant par exemple un trait de soulignement (_).

Node 2: sur ce bâtiment, si vous écrivez false_X, il verra false_Xcomme un atome toute, de sorte que le X ne lié à la déclaration X.

Note 3: Vous devez déclarer ~ un opérateur , sinon Prolog erreur dans ce domaine.

Sur la base de ces deux remarques, vous pouvez toutefois facilement résoudre le problème en utilisant atom_concat/3 à la place:

:- op(1200, fx, [~]). 

change(~A,X):- 
    upcase_atom(A,D), 
    atom_concat(false_,D,X).

La première ligne déclare ~ un opérateur avec un argument (et écrit comme f x) avec priorité 1200 Si l'on écrit cela, la requête cède:

?- change(~(foo),X). 
X = false_FOO. 

?- change(~foo,X). 
X = false_FOO.