[Prolog][Resolu] predicat "is_name"

predicat "is_name" [Prolog][Resolu] - Divers - Programmation

Marsh Posté le 09-11-2024 à 23:21:51    

Bonjour, je voudrai écrire un bout de code avec Prolog qui permet d'afficher "Eureka".
 
j'ai un prédicat "name" :
 
name(eureka).
 
et un prédicat "is_name" :
 
is_name(_) :-
   name($1), !,
   write ('Eureka').
 
 
dans un fichier "eureka.pl".
 
 
Et j'appelle swipl comme ça :
 
echo "is_name(eureka)." | swipl -f eureka.pl
 
 
Mais ça donne false.
 
 
Pouvez vous me donner un coup de main ?
 
S'il vous plait !


Message édité par lady287 le 12-11-2024 à 14:52:40
Reply

Marsh Posté le 09-11-2024 à 23:21:51   

Reply

Marsh Posté le 10-11-2024 à 08:51:59    

false car le code est incorrect.
Tu dois obtenir comme erreur :  
 
ERROR: Unknown procedure: name/1
ERROR:   However, there are definitions for:
ERROR:         name/2
ERROR:  
ERROR: In:
ERROR:   [13] name($1)
ERROR:   [12] is_name(toto) at /home/joel/Documents/travail/VSCode/prolog/divers/eureka.pl:5
ERROR:   [11] toplevel_call(user:user: ...) at /usr/lib64/swipl-9.2.8/boot/toplevel.pl:1317
   Exception: (13) name($1) ? EOF: exit (status 4)
 
Au passage pas d'espace avant la parenthèse du prédicat write.
 
Ce qui fonctionne par exemple c'est un code comme ça
 
is_name(V) :-
  write(V).
 
 
Tu obtiendras toujours false ou true pour ce genre de code car en Prolog on pose une question au système qui répond Vrai ou Faux.
L'appel à Prolog est plus intéressant avec "echo "is_name(toto)." | swipl -q -f eureka.pl"
-q clot l'appel à SWI-Prolog

Reply

Marsh Posté le 11-11-2024 à 17:44:51    

Merci Trap D.
 
Bonjour,
 
Je pige pas l'argument 'V'.
 
Mon objectif est d'afficher "Eureka" si je fourni le nom "eureka".
J'ai une condition normalement au prédicat is_name.

Reply

Marsh Posté le 11-11-2024 à 22:39:03    

Le programme écrit l'argument qui lui est passe (en l'occurence c'est V).
Je ne comprends pas ce que tu cherches à faire.
Quelle est pour toi la signification de $1 dans ton code ?
Ca ne correspond à rien en Prolog.
name existe en Prolog mais il nécessite 2 arguments. Par exemple

Code :
  1. ?- name(toto, L).

  2. L = [116, 111, 116, 111].  
  3. ?- name(X, [116,111,116,111]).

  4. X = toto.



Si tu veux que ton programme ecrive "eureka" c'est simplement

Code :
  1. is_name :-
  2.     write(eureka).


Tu obtiendras

Code :
  1. ?- is_name.
  2. eureka
  3. true.


Si tu veux absolument écrire Eureka alors le programme est  

Code :
  1. is_name :-
  2.     write('Eureka').


Reply

Marsh Posté le 12-11-2024 à 13:28:58    

Je pensais déclaré un nom avec la liogne suivante :
 
name(eureka).
 
Afficher condutionnellment Euréka si je fournis le nom eureka avec le prédicat suivant.
 
is_name(_) :-
name($1), !,
write(Eureka).
 
Mais selon te indication mon prédicat is_name devrait prendre la forme suivante
 
is_name(V) :-
name(V), !,
write(Eureka).
 
Où le ligne suivante est un test conditionel :

Code :
  1. name(V), !,


Message édité par lady287 le 12-11-2024 à 14:13:08
Reply

Marsh Posté le 12-11-2024 à 14:11:46    

Merci encore Trap D.
 
Ca fonctionne impécable.

Reply

Marsh Posté le 12-11-2024 à 14:49:19    

Ah ! Non !
 
C'est pas bon.
 
Ca m'affiche Eureka même si j'entre autre chose.
 

Ah ! Non !
 
C'est bon !
 
Je me suis embrouillé dans mon code.
 
C'est bon !


Message édité par lady287 le 12-11-2024 à 14:52:09
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed