• [^] # Re: Prolog

    Posté par . En réponse au journal Explorer des langages de programmation - édition 2020. Évalué à 4. Dernière modification le 27 avril 2020 à 12:17.

    Salut,

    Il a fallu que je farfouille dans de vieux dossiers, mais si tu aime le prolog, en voilà un petit bout :

    %%%%%%%%%%%%%%%%%%%%%%%%
    % Reines.pl
    %
    % Comment placer N reines sur un echiquier NxN
    % necessaire pour between/3
    :-lib(util).
    caseLibre(_,[],_).
    caseLibre(R,[T|L],N):- pasPrise(R,T,N),
     M is N+1, caseLibre(R,L,M).
    pasPrise(R,T,N):- R =\= T,
     S is T + N, S =\= R,
     U is T - N, U =\= R.
    solution([],_).
    solution([T|L],N):- solution(L,N),
     between(1,N,T),
     caseLibre(T,L,1).
    solGraph(L,N):- length(L,N), genSol(L,N) .
    genSol(L,N):- solution(L,N), !,
     afficheReine(L,N).
    afficheReine([],_):-nl.
    afficheReine([T|L],N):- M is N, printLine(T,M),
     afficheReine(L,N).
    printLine(1,N):- write('R '), M is N-1, printLine(0,M).
    printLine(0,N):- N < 1, nl.
    printLine(0,N):- write('x '), M is N-1, printLine(0,M).
    printLine(T,N):- write('x '), U is T-1, M is N-1, printLine(U,M).

    C'est bien vieux, et probablement pas du tout optimal. C'est pour résoudre le Problème des huit dames

    Je ne sais même pas si ça passe avec du prolog moderne.

    Matricule 23415