IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Prolog Discussion :

problème d'interprétation : est-il possible de le faire ?


Sujet :

Prolog

  1. #1
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut problème d'interprétation : est-il possible de le faire ?
    Bonjour. Petit problème d'interprétation avec Prolog.

    Je suis toujours avec mon prédicat lire/3 qui attend une phrase de forme (Sujet, Verbe, [Complément]).
    Je passe par un prédicat defrag/4 définit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /* Décompose une phrase de fomre [Sujet, Verbe | Complément]                  */
    defrag([Sujet, Verbe | Complément], Sujet, Verbe, Complément).
    J'essaie de passer le prédicat lire/3 avec ces arguments à Prolog via la saisie sur la ligne de lecture de read/1.

    Je procède de la mière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    pedialog:-
        prompt1("you : "),
        read(P),
        split_string(P, ' ', "", List),
        nth0(0, List, A),    
        atom_string(A, S),
        (S == "lire" ->
             delete(List, A, R),
             write("the rest : "), writeln((R)),
             defrag(R, Sujet, Verbe, Complément),
             lire(Sujet, Verbe, Complément)
         ;   
         ajouter(P)),
        pedialog.
    J'arrive à appeler lire/3 ainsi et je pense passer les arguments, mais ce que je souhaiterais, c'est également passer des argument génériques ou Vide pour obtenir le même résultat qu'en passant par l'interpréteur Prolog.

    J'ai essayé de passer une chaîne contenant des atom avec une capitale au début : "lire Qui Fait Quoi".
    J'ai essayé de passer une chaine générique : "lire _ _ _".
    Aucun des deux fonctionne pour le moment.

    Y a- t- il un moyen de le faire ? S'il vous plait ! Merci !
    Logique sans matière est matière de logique.

  2. #2
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    J'ai essayé d'autre chose...

    Dans un premier temps j'ai essayé de protéger les caractère : lire '_' '_' '_'. ou lire "_" "_" "_". avec ou sans anti- slash devant chacune des quote ou bouble- quotes.

    Aprsè j'essaie de manière empirique : une suite de si si non si, ... si non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    pedialog:-
        prompt1("you : "),
        read(P),
        split_string(P, ' ', "", List),
        nth0(0, List, A),    
        atom_string(A, I),
        (I == "lire" ->
             delete(List, A, R),
             write("the rest : "), writeln((R)),
             defrag(R, Sujet, Verbe, Complément),
             atom_string(Sujet, S),
             atom_string(Verbe, V),
             nth0(0, Complément, E),         
             atom_string(E, C),
             (Sujet == "_", Verbe == "_", E == "_" ->
                  lire(Who, Doing, What)
              ;
              (S == "_", V == "_" ->
                   lire(Who, Doing, Complément)
               ;
               (S == "_", C == "_" ->
                    lire(Who, Verbe, What)
                ;
                (C == "_" ->
                     lire(Sujet, Verbe, What)
                 ;
                 (V == "_", C == "_" ->
                      lire(Sujet, Doing, What)
                  ;
                  lire(Sujet, Verbe, Complément))))))
         ;   
         ajouter(P)),
        pedialog.
    je n'arrive à rien non plus. Mais là c'est pas normal.
    Logique sans matière est matière de logique.

  3. #3
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut j'ai choisi un caractère spécial pour les requête spéciales : le sharp '#'.
    Bonsoir à l'heure qu'il est.
    j'ai choisie un caractère spécial, en espérant qu'il n'ai pas une trops grande signification pour Prolog, je changerait si besoin, le sharp '#'.

    J'ai tout bien fait mais ça marche toujours pas et là je shèche, ou je donne ma langue au chat !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    pedialog:-
        prompt1("you : "),
        read(P),
        split_string(P, ' ', "", List),
        nth0(0, List, A),    
        atom_string(A, I),
        (I == "lire" ->
             delete(List, A, R),
             write("the rest : "), writeln((R)),
             defrag(R, Sujet, Verbe, Complément),    
             atom_string(Sujet, S),
             char_code(S, S_Code),
             writeln(S_Code),
             atom_string(Verbe, V),
             char_code(V, V_Code),
             writeln(V_Code),
             nth0(0, Complément, E),         
             atom_string(E, C),
             char_code(C, C_Code),
             writeln(C_Code),
             char_code('#', Sharp_Code), % code ascii decimal : 35.  
             (S_Code == Sharp_Code, V_Code == Sharp_Code, C_Code == Sharp_Code ->
                  lire(Who, Doing, What)
              ; (S_Code == Sharp_Code, V_Code == Sharp_Code ->
                     lire(Who, Doing, Complément)
                 ;  (S_Code == Sharp_Code, C_Code == Sharp_Code ->
                         lire(Who, Verbe, What)
                     ; (C_Code == Sharp_Code ->
                            lire(Sujet, Verbe, What)
                        ; (V_Code == Sharp_Code, C_Code == Sharp_Code ->
                               lire(Sujet, Doing, What)
                           ; lire(Sujet, Verbe, Complément))))))
         ;
         ajouter(P)),
        pedialog.
    Alors là, je ne comprends pas.
    Prolog, ne renvoie pas d'erreur, mais le lire semble ne pas être exécuté.

    exemple :
    you : "je mange une banane".
    No, : mange je une banane ?
    |: yes.
    you : "lire # # #".
    the rest : [#,#,#]
    35
    35
    35
    you :
    Logique sans matière est matière de logique.

  4. #4
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Complétion de code dans un nouveau prédicat glire/3
    Le prédicat glire/3 appelle lire selon les arguments spéciaux.

    j'avais écrit le code ci-dessus pour tester, j'ai un peu compléter le code pour passer les 6 requêtes possible.
    Mais ça marche pas donc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    glire(Sujet, Verbe, Complément) :-
        atom_string(Sujet, S),
             atom_length(S, S_Length),
             (S_Length == 1 ->
                  char_code(S, S_Code),
                  write("S_Code : "), writeln(S_Code); true),
             atom_string(Verbe, V),
             atom_length(V, V_Length),
             (V_Length == 1 ->
                  char_code(V, V_Code),
                  write("V_Code : "), writeln(V_Code); true),
             nth0(0, Complément, E),
             atom_string(E, C),
             atom_length(C, C_Length),
             (C_Length == 1 ->
                  char_code(C, C_Code),
                  write("C_Code : "), writeln(C_Code); true),
     
             char_code('#', Sharp_Code), % code ascii decimal : 35.                 
             (S_Length == 1, S_Code == Sharp_Code,
              V_Length == 1, V_Code == Sharp_Code,
              C_Length == 1, C_Code == Sharp_Code ->
                  lire(Who, Doing, What)
              ; (S_Length == 1, S_Code == Sharp_Code,
                 V_Length == 1, V_Code == Sharp_Code ->
                     lire(Who, Doing, Complément)
                 ;  (S_Length == 1, S_Code == Sharp_Code,
                     C_Length == 1, C_Code == Sharp_Code ->
                         lire(Who, Verbe, What)
                     ; (C_Length == 1, C_Code == Sharp_Code ->
                            lire(Sujet, Verbe, What)
                        ; (V_Length == 1, V_Code == Sharp_Code,
                           C_Length == 1, C_Code == Sharp_Code ->
                               lire(Sujet, Doing, What)
                           ; lire(Sujet, Verbe, Complément)))))).

    Exécution :
    What language are you?
    [bash,tcsh,csh,prolog,other]
    |: other.
    Hello lady arknos!
    We are compatible systems!
    you : "je mange une pomme".
    No, : mange je une pomme ?
    |: yes.
    you : "lire je # #".
    the rest : [je,#,#]
    V_Code : 35
    C_Code : 35
    arknos!
    We are compatible systems!
    you :
    Logique sans matière est matière de logique.

  5. #5
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut avec findall+un prédicat pour afficher.
    Bonjour,

    j'essaie de passer une requête Prolog sur une ligne de saisie avec read/1.
    J'ai choisi le character sharp : '#' pour jouer le rôle de caractère générique.
    Si un '#' est présent sur la ligne de saisie, il est remplacé par une variable vide.
    Ainsi on peut requêté de 6 manière différente le prédicat lire/3 que j'appelle via findall.
    Dans le code suivant seule une requête de type "lire # # #". fonctionne ; Soit uniquement le premier test de la combinaison "Sujet Verbe Complément" ou sujet, Verbe, Complément peut être remplacé par un '#'.
    Les 4 suivant m'informe que la liste obtenue avec findall sont vide.
    Le 6ieme revoie false inconditionnellement.

    Voici les codes de traitement des 6 possibilité :
    D'abord, je test chacun des prédicat pour savoir si le prédicat est un caractère unique.
    En suite je teste chacun des cas de présence de '#' et j'appelle findall/3 avec les paramètres nécessaires.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
     
    glire(Sujet, Verbe, Complément) :-
        atom_string(Sujet, S),
        atom_length(S, S_Length),
        (S_Length == 1 ->
             char_code(S, S_Code),
             write("S_Code : "), writeln(S_Code); true),
        atom_string(Verbe, V),
        atom_length(V, V_Length),
        (V_Length == 1 ->
             char_code(V, V_Code),
             write("V_Code : "), writeln(V_Code); true),
        nth0(0, Complément, E),
        atom_string(E, C),
        atom_length(C, C_Length),
        (C_Length == 1 ->
             char_code(C, C_Code),
             write("C_Code : "), writeln(C_Code); true),
     
        char_code('#', Sharp_Code), % code ascii decimal : 35.                      
     
        /* Début des testes de combinaison. */
     
        (S_Length == 1, S_Code == Sharp_Code,
         V_Length == 1, V_Code == Sharp_Code,
         C_Length == 1, C_Code == Sharp_Code ->
             writeln("glire(Who, Doing, What)"),
             /* lire(Who, Doing, What) */
             findall([S1, V1,  C1], lire(S1, V1, C1), Goal),
             /* lire(Sujet, Goal), */
             writeln("findall ok!"),
             length(Goal, Len),
             write("Goal length : "), writeln(Len),
             (Len \= 0 ->
                  writeln("not empty result..."),
                  Last is Len - 1,
                  foreach(between(0, Last, X),
                          svcprint(Goal, X));
              writeln("Empty goal!"))
     
        ; (S_Length == 1, S_Code == Sharp_Code,
            V_Length == 1, V_Code == Sharp_Code ->
                /* lire(Who, Doing, Complément) */
                findall([S2, V2], lire(S2, V2, Complément), Goal),
     
                writeln("findall ok!"),
                length(Goal, Len),
                write("Goal length : "), writeln(Len),
                (Len \= 0 ->
                     writeln("not empty result..."),
                     Last is Len - 1,
                     foreach(between(0, Last, X),
                             svprint(Goal, Complément, X));
                 writeln("Empty goal!"))
     
            ;  (S_Length == 1, S_Code == Sharp_Code,
                C_Length == 1, C_Code == Sharp_Code ->
                    writeln("glire(Who, Verbe, What)"),
                    /* lire(Who, Verbe, What) */
                    findall([S3, C2], lire(S3, Verbe, C2), Goal),
                    /* lire(S, Verbe, C), */
                    writeln("findall ok!"),
                    length(Goal, Len),
                    write("Goal length : "), writeln(Len),
                    (Len \= 0 ->
                         writeln("not empty result..."),
                         Last is Len - 1,
                         foreach(between(0, Last, X),
                                 scprint(Goal, Verbe, X));
                     writeln("Empty goal!"))
     
                ; (V_Length == 1, V_Code == Sharp_Code,
                   C_Length == 1, C_Code == Sharp_Code ->
                       writeln("glire(Sujet, Doing, What)"),
                       /* lire(Sujet, Doing, What) */
                       findall([V3, C3], lire(Sujet, V3, C3), Goal),
                       /* lire(Sujet, Goal), */
                       writeln("findall ok!"),
                       length(Goal, Len),
                       (Len \= 0 ->
                            writeln("not empty result..."),
                            Last is Len - 1,
                            foreach(between(0, Last, X),
                                    vcprint(Sujet, Goal, X));
                        writeln("Empty goal!"))
     
                   ; (C_Length == 1, C_Code == Sharp_Code ->
                          writeln("glire(Sujet, Verbe, What)"),
                          /* lire(Sujet, Verbe, What) */
                          findall(C4, lire(Sujet, Verbe, C4), Goal),
                          /* lire(Sujet, Verbe, Goal), */
                          writeln("findall ok!"),
                          length(Goal, Len),
                          (Len \= 0 ->
                               writeln("not empty result..."),
                               Last is Len - 1,
                               foreach(between(0, Last, X),
                                       cprint(Sujet, Verbe, Goal, X));
                           writeln("Empty goal!"))
     
                      ; (V_Length == 1, V_Code == Sharp_Code ->
                             writeln("glire(Sujet, Doing, Complément)"),
                             /* lire(Who, Verbe, What) */
                             findall(V4, lire(Sujet, V4, Complément), Goal),
                             /* lire(Sujet, Verbe, Goal), */
                             writeln("findall ok!"),
                             length(Goal, Len),
                             (Len \= 0 ->
                                  writeln("not empty result..."),
                                  Last is Len - 1,
                                  foreach(between(0, Last, X),
                                          vprint(Sujet, Goal, Complément, X));
                              writeln("Empty goal!"))
     
                         ; (S_Length == 1, S_Code == Sharp_Code ->
                                writeln("glire(Who, Verbe, Complément)"),
                                /* lire(Who, Verbe, What) */
                                findall(S4, lire(S4, Verbe, Complément), Goal),
                                writeln("findall ok!"),
                                /* lire(Who, Verbe, Complément), */
                                length(Goal, Len),
                                (Len \= 0 ->
                                     writeln("not empty result..."),
                                     Last is Len - 1,
                                     foreach(between(0, Last, X),
                                             sprint(Goal, Verbe, Complément, X));
                                 writeln("Empty goal!"))
     
                            ; writeln("full sentence!"),
                              /* lire(Sujet, Verbe, Complément) */
                              lire(Sujet, Verbe, Complément)))))))).
    Merci pour votre aide.

    Edit : j'ai oublié de dire que tout les testes de glire fonctionnent si je l'appelle depuis le prompt Prolog mais pas depuis le predicat pedialog/0 suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    pedialog:-
        prompt1("you : "),
        read(P),
        split_string(P, ' ', "", List),
        nth0(0, List, A),
        atom_string(A, I),
        (I == "lire" ->
             delete(List, A, R),
             write("the rest : "), writeln((R)),
             defrag(R, Sujet, Verbe, Complément),
             writeln("defrag ok!"),
             write(Sujet), write(' '),
             write(Verbe), write(' '),
             writeln(Complément),
             glire(Sujet, Verbe, Complément)
             /* lire(Who, Doing, What) */
         ;
         ajouter(P)),
        pedialog.
    Les codes complet sont disponible : https://sourceforge.net/projects/psy...d?source=files
    Logique sans matière est matière de logique.

  6. #6
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut symptomatique : passage de parametres.
    Bonjour,
    Si je prends par exemple la seconde condition qui attend "# # Complément" dont revoilà le code, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    (S_Length == 1, S_Code == Sharp_Code,
     V_Length == 1, V_Code == Sharp_Code ->
                /* lire(Qui, Fait, Complément) */
                findall([S2, V2], lire(S2, V2, Complément), Goal2),
                writeln("findall ok!"),
                length(Goal2, Len2),
                write("Goal length : "), writeln(Len2),
                (Len2 \= 0 ->
                     writeln("not empty result..."),
                     Last2 is Len2 - 1,
                     foreach(between(0, Last2, X),
                             svprint(Goal2, Complément, X));
                 writeln("Empty goal!"))
    Et que dans l'appel à lire/3 dans le findall, je remplace "Complément par '_', ça marche.
    Donc j'ai un problème de passage de paramètre, mais je ne sais lequel.

    Merci pour votre aide.
    Logique sans matière est matière de logique.

  7. #7
    Membre du Club
    Homme Profil pro
    codeur
    Inscrit en
    Mars 2018
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : Mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut je change mon fusil d'épaule.
    Bonsoir.

    J'essaie de profiter simpement de Prolog ici. Ce qui simplifie grandement le code.
    Je test avec deux nouveau prédicat lecture/3 qui interface un findall suivit d'un write.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    /* Prédicats dynamique de la base de faits.                                   *\
    /
    :- dynamic ( sujet/1 ).
    :- dynamic ( verbe/1 ).
    :- dynamic ( complément/1 ).
    :- dynamic ( lire/3 ).
     
    /* Décompose une phrase de forme [Sujet, Verbe | Complément]                  *\
    /
    defrag([Sujet, Verbe | Complément], Sujet, Verbe, Complément).
     
    /* Ajout des prédicats Sujet/1 et Verbe/1 s'ils n'existe pas et des prédicats *\
    /
    /* Complément/1 et lire/3                                                     *\
    /
    écrire(Sujet, Verbe, Complément) :-
        (not(verbe(Verbe)) ->
             assertz((verbe(Verbe)));
        true),
        (not(sujet(Sujet)) ->
             assertz((sujet(Sujet)));
         true),
        assertz((complément(Complément))),
        assertz((lire(Sujet, Verbe, Complément))).
     
    lecture(#, #, #) :- findall([S, V, C], lire(S, V, C), List),
                        writeln(List).
    lecture(Who, #, #) :- findall([V, C], lire(Who, V, C), List),
                          writeln(List).
     
    pedialog:-
        prompt1("you : "),
        read(P),
        split_string(P, ' ', "", List),
        nth0(0, List, A),
        atom_string(A, I),
        (I == "lire" ->
             delete(List, A, R),
             defrag(R, Sujet, Verbe, Complément),
             lecture(Sujet, Verbe, Complément),
             pedialog).

    ?- pedialog.
    you : "lire # # #".

    false.

    ?- lecture('Prolog', #, #).
    true ;
    false.

    ?- lecture(je, #, #).
    true ;
    true ;
    true ;
    false.

    ?-
    je ne comprends pas pourquoi la liste n'est pas affichée, non plus.

    Merci pour votre aide. A charge de retour.


    Edit : Oulala... j'ai à présent complété les prédicat possible de lecture/3 et la list s'affiche bien à l'exécution de lecture, mais toujours pas depuis le prompt de read/1.

    Complément de code, vous avez déjà les deux premier lecture/3, voici les 5 autre + un sur lequel j'ai encore un doute.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    lecture(#, Doing, #) :- findall([S, C], lire(S, Doing, C), List),
                            writeln(List).
    lecture(#, #, What) :- findall([S, V], lire(S, V, What), List),
                           writeln(List).
    lecture(#, Doing, What) :- findall(S, lire(S, Doing, What), List),
                               writeln(List).
    lecture(Who, #, What) :- findall(V, lire(Who, V, What), List),
                             writeln(List).
    lecture(Who, Doing, #) :- findall(C, lire(Who, Doing, C), List),
                              writeln(List).
    lecture(Who, Doing, What) :- lire(Who, Doing, What).
    Logique sans matière est matière de logique.

Discussions similaires

  1. problème intégration, mais est ce possible ?
    Par ProActif dans le forum SpagoBI
    Réponses: 1
    Dernier message: 16/02/2009, 14h51
  2. Réponses: 4
    Dernier message: 15/07/2008, 11h45
  3. La main indiquant un lien Est il possible de la faire disparaitre et - ?
    Par bilou95 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/05/2007, 15h06
  4. [PHP-JS] Est il possible de les faire fonctionner ensemble ?
    Par bilou95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/12/2006, 12h25
  5. Est-il possible de le faire en CSS ?
    Par Romain_25 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 08/08/2005, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo