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

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut [Prolog][Projet psys][open-source] Tout ce que je trouve de bon dans ce que je fais.
    Bonjour.
    Je vais peu-être surprendre un peu. Je débute avec Prolog. Mais j'ai un besoin ambitieux.

    Je veux utiliser mon système d'axploitation en parlant en langage naturel à mon programm et qu'il fasse ce qu'il a à faire et me réponde intelligemment.

    Pour le faire, je vais apprendre prolog, pour exploiter un autre programme que j'écris avec Ada.

    Voici le meilleurs de que que je vais trouver, et j'espère au final vous livrer un super programme, ma foi, à l'echelle d'un homme.

    Pour commencer, j'ai écris trois fichers [facts,right,goals].

    facts: (pour le moment vide)
    right:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    username(X):- getenv('USER', X).
    goals:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    :- initialization init.
     
    whoami(X):- username(X).
     
    init:- consult(facts),
           consult(right).
    J'ai bien aimé la réussite du prédicat whoami, faillant par défaut sur ma machine.

    Bonne soirée.

    Edit : désolé, j'ai oublié la ligne:- initialization init. dans le fichier goals
    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 : 49
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Hello World après vérification de l'utilisateur courant avec username sur GNU/Linux.
    Bonjour.
    Toujours rien dans le fichiers facts.
    Par contre j'ai trouvé sur le net dans la documentation de Swi-Proplog, une technique pour lire la table '/etc/passwd'. Alors, du coup j'ai fais ceci qui me parait mieux adapté à l'utilisation de Prolog.

    Les règles :
    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
     
    clear:- write('\e[H\e[2J').
    username(X) :- getenv('USER', X).
    linux(H) :- new_table('/etc/passwd',
                          [ user(atom),
                            passwd(code_list),
                            uid(integer),
                            gid(integer),
                            gecos(code_list),
                            homedir(atom),
                            shell(atom)
                          ],
                          [ field_separator(0':)
                          ],
                          H).
    Les goals:
    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
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    %%                                Prolog System                             %%  
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    %% Date         : Sat Mar 17 03:04:27 CET 2018                                  
    %% Version      : 0.1.0a                                                        
    %% Authors      : arknos                                                        
    %% Description  : Self initialized with user autorization from table in         
    %%                '/etc/passwd' on GNU/Linux system.                            
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
    %%                                                                          %%  
    %%                                                                          %%  
    %%                                  The Goals                               %%  
    %%                                                                          %%  
    %%                                                                          %%  
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
     
    :- initialization init.
     
    whoami(X) :- username(X).
     
    hello(User) :- write('Hello '),
                   write(User),
                   writeln('!');
     
    login(User) :- linux(H),
                   findall(User,
                           in_table(H,
                                    [user(User),
                                     gid(_)],
                                    _),
                           Users),
                   member(User, Users).
     
    main :- clear,                                                                  
            writeln('who are you?'),                                                
            prompt1('username : '),                                                 
            read(USERNAME),                                                         
            login(USERNAME),                                                        
            hello(USERNAME).                                                        
     
     
    init :- consult(right),                                                         
            main,                                                                   
            consult(facts).
    Voilà, alors, j'ai inversé la consultation de right et facts.
    En fait je me demande si les faits ne sont pas le produit de l'application d'un goal qui serait un appel suplémentaire, du droit.

    Le predicat login peut être completé par une sortie conditionnel si User, n'est pas dans Users.

    il suffis d'ajouter ;halt avant le point final.
    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 : 49
    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 pmodifié le prompt.
    bonjour, j'ai modifié le prompt, j'aurait peut-être pas du.

    ligne 36 dans main:-
    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 : 49
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut un predicat pour les mails
    J'aime bien shell également.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mail :- whoami(X),
            atom_concat('mail -u ', X, COMMAND),
            shell(COMMAND).
    Pour consulter la commande 'mail -u $USER'.
    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 : 49
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut une déclaration de chaîne de charactèr grace à l'unification avec l'operateur '='
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    description(defrag, X) :- X = "'message d'aide'.".
    Je note les guillemets autour du text et le résultat qui s'affiche :

    ?- description(defrag, X).
    X = "'message d'aide'.".

    ?-
    Puis le predicat help :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    help(defrag) :-
        description(defrag, X),
        writeln(X).
    ?- help(defrag).
    'message d'aide'.
    true.

    ?-
    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 : 49
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Traitement du langage naturel.
    Bonsoir,
    une petite machine pour savoir ce qu'il se passe presuqe en langage naturel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    :- dynamic ( sujet/1 ).
    :- dynamic ( verbe/1 ).
    :- dynamic ( complément/1 ).
    :- dynamic ( lire/3 ).
     
    ajouter(Sujet, Verbe, Complément) :-
        (not(verbe(Verbe)) ->
                 assertz((verbe(Verbe)))),
        (not(sujet(Sujet)) ->
                 assertz((sujet(Sujet)))),
        assertz((complément(Complément))),
        assertz((lire(Sujet, Verbe, Complément))).
    D'abord il faut appeler ajouter/3 pour ajouter un fait, puis lire/3, pour requêter Prolog.


    ?- ajouter(je, mange, "une poire").
    true.

    ?- ajouter(je, mange, "une pomme").
    true.

    ?- ajouter(je, mange, "des scoubidous").
    true.

    ?- lire(Qui, Suis, Je).
    Qui = je,
    Suis = mange,
    Je = "une poire" ;
    Qui = je,
    Suis = mange,
    Je = "une pomme" ;
    Qui = je,
    Suis = mange,
    Je = "des scoubidous".

    ?-
    Edit : correction de code.
    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 : 49
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Un autre petit morceau de psys.
    Bonjour,
    J'avance petit à petit.
    La base précédente chez moi dans un fichier nommé "pengine.pl".
    Le suivant, un autre petit morceau du projet psys est dans un fichier nommé "pborg.pl".
    Il contient un ensemble de faits affirmatifs, deux règle (intrinsèque), et un prédicat (d'interface) pour requêter Prolog.
    L'objet du programme est de s'exprimer nomalement, ou prochement du langage naturel, j'en suis loin pour le traitement général.
    Ainsi, si vous poser une question dans la forme interrogative, il vous réponds dans une forme affirmative selon les faits.

    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
     
    ?- shell('cat pborg.pl').
    /*****************************/
    /* Pborg is Prolog organism. */
    /*****************************/
     
    /* facts database */
     
    fait(je, dis, [ce, que], je, comprends).
    fait(je, comprends, [ce, que], je, conçois).
    fait(je, conçois, [ce, que], tu, réponds).
    fait(tu, réponds, [ce, que], tu, penses).
    fait(tu, penses, [ce, que], tu, dis).
    fait(tu, dis, [ce, que], tu, comprends).
    fait(tu, comprends, [ce, que], tu, conçois).
    fait(tu, conçois, [ce, que], je, réponds).
    fait(je, réponds, [ce, que], je, pense).
    fait(je, pense, [ce, que], je, dis).
     
    répondre([Verbe, Sujet, ce, que | Complément], Sujet, Verbe, Complément).
     
    question([Sujet, Verbe], Sujet, Verbe).
     
    affirmer(Text) :-
        atomic_list_concat(List, ' ', Text),
        répondre(List, Sujet, Verbe, Complément),
        question(Complément, Sujet2, Verbe2),
        atomic_list_concat([Verbe2, Sujet2, ce, que, Sujet, Verbe], ' ', Result),
        write(Result), writeln(' ?'),
        répondre([Verbe2, Sujet2, ce, que, Sujet, Verbe], Qui, Fait, Quoi),
        répondre([Fait, Qui, ce, que, Quoi], Sujet3, Verbe3, Complément3),
        atomic_list_concat([Sujet3, Verbe3, ce, que, Sujet, Verbe], ' ', Result2),
        write(Result2), writeln(' !'),
        fait(Sujet3, Verbe3, [ce, que], Sujet, Verbe).
     
     
     
     
     
    true.
     
    ?-
    Une réquête :
    ?- consult(pborg).
    Warning: /home/manu/devel/Projects/pborg/pborg.pl:22:
    Singleton variables: [Complément3]
    true.

    ?- affirmer("réponds tu ce que je conçois").
    conçois je ce que tu réponds ?
    je conçois ce que tu réponds !
    true ;
    false.

    ?-
    Merci à la comunnauté Prolog, ici pour votre patience, et ailleurs pour toutes les documentations que j'ai pu consulter et ce gratuitement sur Internet.
    Merci, Grand merci à Trap_D qui m'a permis de mener à bien ces petits programmes.
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut le must de la requête
    Bonjour,
    Je viens de me simplifier la vie, peut-être pour un instant, plus si affinité.

    Vous avez peut-être lu les code si dessus...

    Dans le code précédant, je me suis un peu compliqué la vie. Enfin peut-être, en tout cas un prédicat d'arrité 5 n'est pas vraiment nécessaire pour moi pour le moment ici.

    En effet, un prédicat lire/3 défini comme : lire(Sujet, Verbe, Complément). peut me satisafaire dans la mesure ou Complément est une liste.

    Car je peux par la suite saisire une réquête de lire de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -? lire(Qui, Fait, [ce, que | Quoi]).
    ?- lire(Qui, Fait, [ce, que | Quoi]).
    Qui = je,
    Fait = comprends,
    Quoi = [tu, dis] ;
    Qui = tu,
    Fait = conçois,
    Quoi = [je, réponds] ;
    Qui = je,
    Fait = pense,
    Quoi = [tu, comprends] ;
    Qui = tu,
    Fait = dis,
    Quoi = [je, conçois] ;
    Qui = tu,
    Fait = comprends,
    Quoi = [je, dis] ;
    Qui = je,
    Fait = conçois,
    Quoi = [tu, réponds] ;
    Qui = tu,
    Fait = penses,
    Quoi = [je, comprends] ;
    Qui = je,
    Fait = dis,
    Quoi = [tu, conçois].

    ?-
    Vraiment intéressante comme notion de requête Prolog. J'adore.
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut une requête d'arité 9 dans une requête d'arté 3.
    Bonjour,

    Je trouve ça excélent, je passe une requete d'arité 7 dans une requête d'arité 3.

    ?- result(Who, [Dealer, What, Where, When, Howto, infinite, Price], quantity).
    Who = arknos,
    Dealer = me,
    What = intelligency,
    Where = here,
    When = now,
    Howto = forever,
    Price = free.

    ?-
    Je ne sais pas si c'est normal Mai ça me plait !

    le code est là :https://www.developpez.net/forums/d1...ng-mix-prolog/
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    c'est une puissance Prolog, en quelque jours grace à Trap_D et votre patience, j'ai réussie à faire une association intelligement, (enfin moi je trouve), sans faire exprès, ou presque .

    Comme quoi ce langage est à la porté de tout le monde, ou presque.

    ?- findall(X, result(arknos, X, price), L).
    L = [['Srf', 'mobil-phone', 'France', '2018-2019', virement, '12', '56'], ['Free', 'Internet', 'France', '2018-2019', virement, '12', '36'], ['EDF', éléctricité, 'France', '2018-2019', virement, '12'|...], ['GDF', gaz, 'France', '2018-2019', virement|...], ['Loyer', habitation, 'France', '2018-2019'|...]].

    ?- nth0(4, L, X).
    L = [_G1332, _G1335, _G1338, _G1341, X|_G1345].

    ?- problem(price, X, Values).
    X = [_G1324, _G1327, _G1330, _G1333, _G1336, _G1339, _G1342],
    Values = ['56', '36', '40', '10', '85'] ;
    true.

    ?-
    J'ai plus qu'à faire la somme de values pour avoir le total de mes depenses.

    J'ai dis une enorme bêtise, parce que ci j'aditionne un choux avec une carore et des pomme de terre je vais obtenir une bonne soupe, mais c'estp pas l'objet ici.
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Merci à tous les participants de ce forum.
    Bonjour,
    Merci !


    ?- pnl.
    |: yes i love you !
    you like me!
    |: do you like me ?
    like do you?
    |: yes i love you !
    you like me!
    |: yes i like you !
    you love me!
    |: do you kill me ?
    dead do you?
    |: no i have life !
    peace have me?
    |: yes i do !
    false.

    ?-





    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    subject(i).
    subject(you).
    subject(he).
    subject(she).
    subject(we).
    subject(they).
    
    antinomie(negative, positive).
    antinomie(no, yes).
    antinomie(true, false).
    
    antinomie(born, dead).
    antinomie(peace, war).
    antinomie(dead, life).
    antinomie(i, you).
    antinomie(we, they).
    antinomie(win, loose).
    
    synonyme(no, negative).
    synonyme(negative, false).
    
    synonyme(yes, positive).
    synonyme(positive, true).
    
    synonyme(affirmative, positive).
    
    synonyme(born, life).
    synonyme(i, me).
    synonyme(love, like).
    synonyme(war, dead).
    synonyme(kill, war).
    synonyme(life, will).
    
    [no_analyze([X|_], S) :-
        (search_synonyme(X, Y),
         search_antinomie(Y, A),
         search_synonyme(A, S), !
         ;
         search_antinomie(X, S), !
         ;
         S = X).
    
    yes_analyze([X|_], A) :-
        (search_antinomie(X, Y),
         search_synonyme(Y, S),
         search_antinomie(S, A), !
         ;
         search_synonyme(X, A), !
         ;
         A = X).
    
    no :- write('no, ').
    yes :- write('yes, ').
    
    no([X|L], S) :- no_analyze(L, S).
    yes([X|L], A) :- yes_analyze(L, A).
    
    is_affirmative([Subject, Verb | Complement]) :- subject(Subject).
    is_interrogative([Verb, Subject | Complement]) :- subject(Subject).
    
    is_affirmative(List, End) :- (End == 33; End == 46),
                                 is_affirmative(List).
    
    is_interrogative(List, End) :- End == 63,
                                   is_interrogative(List).
    
    inverse_affirmative([Subject, Verb | Complement], [C, V, S]) :-
        yes_analyze([Subject], S),
        yes_analyze([Verb], V),
        yes_analyze(Complement, C).
    
    inverse_interrogative([Verb, Subject | Complement], [R, S, V, C]) :-
        (yes_analyze([Subject], S),
         yes_analyze([Verb], V),
         yes_analyze(Complement, C), !,
         R = yes
         ;
         no_analyze([Subject], S),
         no_analyze([Verb], V),
         no_analyze(Complement, C), !,
         R = no).
    
    words_to_list(Index, Words, List) :-
        nth0(Index, Words, S),
        nth0(Index, List, A),
        atom_codes(A, S).
    
    output_to_list(String, List, Sentence) :-
        split_string(String, "-', ", ", ", String_List),
        length(String_List, Length),
        length(List, Length + 1),
        Last is Length - 1,
        foreach(between(0, Last, Index),
                words_to_list(Index, String_List, List)),
    
        length(Sentence, Length),
        foreach(between(0, Last, Index),
                words_to_list(Index, String_List, Sentence)).
    
    input_to_list(String, List, Sentence) :-
        split_string(String, "-', ", ", ", String_List),
        length(String_List, Length),
        List_Length is Length + 1,
        length(List, List_Length),
        Last is Length - 1,
    
        foreach(between(0, Last, Index),
                words_to_list(Index, String_List, List)),
    
        length(Sentence, Length),
        foreach(between(0, Last, Index),
                words_to_list(Index, String_List, Sentence)).
    
    pnl :-
        read_string(user_input, "!?.", """\n", End, String),
    
    
        input_to_list(String, List, Sentence),
        length(List, Length),
        nth1(Length, List, At_End),
        char_code(At_End, End),
    
        nth1(1, Sentence, Head),
    
        (
            Head == yes ->
                delete(Sentence, yes, Affirmative),
                %yes(Affirmative, Yes),                                                   
    
                inverse_affirmative(Affirmative, Response),
    
                atomics_to_string(Response, ' ', Result),
    
                write(Result), writeln(At_End) ;
    
            Head == no ->
                delete(Sentence, no, Interrogative),
                %no(Interrogative, No),                                                   
    
                inverse_affirmative(Interrogative, Response),
    
                atomics_to_string(Response, ' ', Result),
    
                write(Result), writeln('?') ;
    
            (is_affirmative(List, End) ->
                 inverse_affirmative(Sentence, Response),
              atomics_to_string(Response, ' ', Result),
              write(Result), writeln(At_End) ;
    
             (is_interrogative(List, End) ->
    
                  inverse_interrogative(Sentence, R),
                  nth1(1, R, A),
                  (
                      A == yes ->
                          delete(R, yes, Affirmative),
    
                          %yes(Affirmative, Yes),                                         
    
                          inverse_affirmative(Affirmative, Response),
    
                          atomics_to_string(Response, ' ', Result),
                          yes, write(Result), writeln(At_End) ;
                       A == no ->
                          delete(R, no, Interrogative),
    
                          %no(Interrogative, No),                                         
    
                          inverse_affirmative(No, Response),
    
                          atomics_to_string(Response, ' ', Result),
                          no, write(Result), writeln('?')
                      ;
    
                      atomics_to_string(R, ' ', Result),
                      write(Result), writeln('?')
                  )
             )
            )
        ),
        pnl.
    (le code est pas complet, ni parfait notamment sur la poncutation finale des forme interrogatige emmise en réponse par Prolog.)

    Prolog, c'est simplement génial !




    Edit : En fait our corriger un peu le programme il faux inverser chaque tuple par bloc de writeln('?'), et writeln(At_End) dans le predicat pnl/0

    Edit : 2 il y aune autre erreur, le dernier appel du predicat inverse_affirmatie, devrait être un inverse_interrogative, d'ailleurs, juste au dessus également.



    Edit 3 j'ai edité le code au mieux, mais corrigé aucun des élément ci-dessus.
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut you are genial! versus i am intelligent !
    Bonjour, mis à part cette petite anomalie de présence d'une espace avant la ponctuation finale des réponses ;
    J'arrive à obtenir un truc sympa après 3 semaines de travail.

    psys-2.3.2.c est sur sourceforge : https://sourceforge.net/projects/psys/

    J'ai ajouté quelque prédicat synonyme et antinomie, mais ça reste un prototype.

    La version 2.3.0.a effectu eventuellement une conversion des sujets
    La version 2.3.1.a effectu eventuellement une conversion des sujets et des verbes
    La version 2.3.2.c effectu eventuellement une conversion des sujet des verbes et des compléménet.

    Regardez yes_analyze et no_analyze pour les trois conversions.

    Exemple :

    psys/0 is user control to access shell written with Prolog.
    Program name : [psys]
    Release : 2.3.2.c
    who are you?
    username : arknos.
    what machine are you?
    [animal,computer]
    |: animal.
    What language are you?
    [bash,tcsh,csh,prolog,other]
    |: other.
    Hello sir arknos!
    We are compatible systems!
    |: am i intelligent?
    No, are you genial ?

    yes/no?|: yes.
    |: am i genial?
    No, are you intelligent ?

    yes/no?|: yes.
    |:


    ?- consult(goals).
    psys/0 is user control to access shell written with Prolog.
    Program name : [psys]
    Release : 2.3.2.c
    who are you?
    username : arknos.
    what machine are you?
    [animal,computer]
    |: animal.
    What language are you?
    [bash,tcsh,csh,prolog,other]
    |: other.
    Hello sir arknos!
    We are compatible systems!
    |: i like you!
    No, love you me ?
    yes/no?|: yes.
    |: who am i?
    No, who am me ?

    yes/no?|: no.
    |: you are genial!
    Yes, i am intelligent !

    Ne pas oublié de sauvegarder avec savepe/0 et savepsys/0
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Petit déjeuné !
    Bonjour,

    Vous lirez bien un peu de Prolog pour le petiti déjeuné ?

    Bon réveil !
    Voici quelque lignes qui produise un listing des combinaisons selon les synonymes et antinomies selon leurs logiques et leurs contradictions.


    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
    /*****************************************************************************/
    /*                                                                           */
    /*             The next predicate provide listing of combinaisons            */
    /*                                                                           */
    /*                                                                           */
    /*****************************************************************************/
     
    logical_affirmative_list(Subject, Verbe, Complement) :-
        subject(S_Left), full_synonyme(S_Left, S_Right),
        logic(V_Left, V_Right), logic(C_Left, C_Right),
        full_inverse_affirmative([S_Right, V_Right, C_Right],
                                 [Subject, Verbe, Complement], R).
     
    against_affirmative_list(Subject, Verbe, Complement) :-
        subject(S_Left), full_antinomie(S_Left, S_Right),
        against(V_Left, V_Right), against(C_Left, C_Right),
        full_inverse_affirmative([S_Right, V_Right, C_Right],
                                 [Subject, Verbe, Complement], R).
     
    logical_interrogative_list(Verbe, Subject, Complement) :-
        subject(S_Left), full_synonyme(S_Left, S_Right),
        logic(V_Left, V_Right), logic(C_Left, C_Right),
        full_inverse_interrogative([V_Right, S_Right, C_Right],
                                   [Verbe, Subject, Complement], R).
     
    against_interrogative_list(Verbe, Subject, Complement) :-
        subject(S_Left), full_antinomie(S_Left, S_Right),
        against(V_Left, V_Right), against(C_Left, C_Right),
        full_inverse_interrogative([V_Right, S_Right, C_Right],
                                   [Verbe, Subject, Complement], R).
     
    theory_list(S, V, C) :- against_interrogative_list(V, S, C),
                            logical_affirmative_list(S, V, C).
     
    antitheory_list(V, S, C) :- against_affirmative_list(S, V, C),
                                logical_interrogative_list(V, S, C).
     
    list(S, V, C) :- antitheory_list(V, S, C), theory_list(S, V, C).
     
    reverse(L, Index, Result) :- nth0(Index, L, E),
                                 nth0(Index, Result, T),
                                 inverse_affirmative(E, T, Not_Empty_But).
     
    dialog_print(Result, Index) :- nth0(Index, Result, Sentence),
                                   write(Sentence), nl.
     
     
    /******************************************************************************/
    /* you must load subject/1 before call this predicate.                        */
    /******************************************************************************/
    full_dialog :- setof([S, V, C], list(S, V, C), L),
                   length(L, L_Length),
                   L_Last is L_Length - 1,
                   length(Result, L_Length),
                   foreach(between(0, L_Last, Index),
                                   reverse(L, Index, Result)),
                   foreach(between(0, L_Last, Index2),
                           dialog_print(Result, Index2)).
    /******************************************************************************/
    /*                                                                            */
    /*                                                                            */
    /*     ******** ***  ***  *****                                               */
    /*     ***      **** ***  **  **                                              */
    /*     ******   * *** **  **  ***                                             */
    /*     ***      ** *** *  **  ***                                             */
    /*     ***      *** ****  **  **                                              */
    /*     ******** ***  ***  *****.                                              */
    /*                                                                            */
    /*                                                                            */
    /******************************************************************************/
    A placer à la fin du fichier goals.

    Sortie de full_dialog/0 chez moi :
    ?- consult(subjects).
    true.

    ?- full_dialog.
    [me,peace,peace]
    [me,peace,live]
    [me,live,peace]
    [me,live,live]
    [i,peace,peace]
    [i,peace,live]
    [i,live,peace]
    [i,live,live]
    [me,peace,peace]
    [me,peace,live]
    [me,live,peace]
    [me,live,live]
    true.

    ?-

    Ce qui est interresant, même très interressant pour moi.
    Je me demande tout de même d'où les doublon vu que j'utilise setof ?

    Si non c'est parfait.

    En vous souhaitant bon week end.
    Logique sans matière est matière de logique.

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

    Informations professionnelles :
    Activité : codeur

    Informations forums :
    Inscription : mars 2018
    Messages : 158
    Points : 64
    Points
    64
    Par défaut Normalement, le protoptype psys est terminé.
    Bonjour,

    Amoins de découvrir encore une erreur ou un bug,

    Finalment pour l'extraction de liste j'utilise le code de rosetta code Prolog flatten/2 que j'ai renommé en unlist/2.

    Les sources sont également disponible en html enrichie à http://arknos.net/others/anpe

    J'en suis à la version 4.0.1.a mais elle affiche 4.0..a ou 4.0.0.b.
    LEs source sont sur sourceforge.net.

    J'aime beaucoup Prolog notament pour le fait de ne pas avoir à patienter le temps d'une compilation parfois fastidieuse, au quel cas je me fait un café normalement mais bon.

    En vous souhaitant bonne continuations.
    Logique sans matière est matière de logique.

Discussions similaires

  1. [Débutant] .NET est-il compatible avec l'esprit projet communaitaire Open Source ?
    Par berceker united dans le forum Framework .NET
    Réponses: 9
    Dernier message: 19/01/2014, 22h18
  2. Réponses: 0
    Dernier message: 30/12/2012, 23h49
  3. Réponses: 0
    Dernier message: 25/05/2011, 15h41
  4. Projet delphi open source
    Par declencher dans le forum Débuter
    Réponses: 12
    Dernier message: 24/12/2009, 13h11
  5. Solutions pour projets non open-source
    Par ben le vif dans le forum Projets
    Réponses: 9
    Dernier message: 05/10/2007, 20h37

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