Changeset 4416 for trunk/examples

Show
Ignore:
Timestamp:
08/10/08 06:25:36 (5 months ago)
Author:
pmoura
Message:

Added the SWI-Prolog constraint "queens" example.

Location:
trunk/examples/constraints/swipl
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/examples/constraints/swipl/queens.lgt

    r4415 r4416  
    1010    :- use_module(clpfd, [ins/2, labeling/2, (#=)/2, (#\=)/2, (#<==>)/2]). 
    1111 
    12     :- public(show/3). 
     12    :- public([n_queens/2, show/3]). 
    1313 
    1414    /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
     
    7878 
    7979    postscript --> 
    80             "systemdict /.setlanguagelevel known { 2 .setlanguagelevel} if \ 
    81      /init {  /N exch def 322 N div dup scale -1 -1 translate \ 
     80        "systemdict /.setlanguagelevel known { 2 .setlanguagelevel} if \ 
     81        /init {  /N exch def 322 N div dup scale -1 -1 translate \ 
    8282              /Palatino-Roman findfont 0.8 scalefont setfont \ 
    8383              0 setlinewidth \ 
    8484              1 1 N { 1 1 N { 1 index c } for pop } for } bind def \ 
    85      /showtext { 0.5 0.28 translate dup stringwidth pop -2 div 0 moveto \ 
     85        /showtext { 0.5 0.28 translate dup stringwidth pop -2 div 0 moveto \ 
    8686              1 setgray show} bind def \ 
    87      /i { gsave translate .5 setgray 0 0 1 1 4 copy rectfill 0 setgray rectstroke \ 
    88         grestore } bind def \ 
    89      /q { gsave translate 0 0 1 1 rectfill (Q) showtext grestore } bind def \ 
    90      /c { gsave translate 1 setgray 0 0 1 1 4 copy rectfill 0 setgray rectstroke \ 
    91         grestore } bind def\n". 
     87        /i { gsave translate .5 setgray 0 0 1 1 4 copy rectfill 0 setgray rectstroke \ 
     88            grestore } bind def \ 
     89        /q { gsave translate 0 0 1 1 rectfill (Q) showtext grestore } bind def \ 
     90        /c { gsave translate 1 setgray 0 0 1 1 4 copy rectfill 0 setgray rectstroke \ 
     91            grestore } bind def\n". 
    9292 
    9393 
     
    9797 
    9898    show(N, Options, Qs) :- 
     99        between(1, infinite, N), 
    99100        open(pipe('gs -dNOPAUSE -g680x680 -dGraphicsAlphaBits=2 -r151 -q -'), write, 
    100              Out, [buffer(false),alias(gs)]), 
     101            Out, [buffer(false),alias(gs)]), 
    101102        tell(Out), 
    102         integer(N), N > 0, 
    103103        phrase(postscript, Ps), 
    104104        format(Ps), 
    105105        format("~w init\n", [N]), 
    106106        n_queens(N, Qs), 
    107         animate(Qs), 
    108         labeling(Options, Qs), 
    109         finish. 
    110     show(_, _, _) :- finish, close(gs), fail. 
     107        call_cleanup(((animate(Qs),labeling(Options, Qs),finish)), close(gs)). 
    111108 
    112109    finish :- 
     
    114111        % fill the buffer to make 'gs' process all generated output 
    115112        ignore((between(1,500,_), 
    116                 format("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"), 
    117                 fail)), 
     113                format("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"), 
     114                fail)), 
    118115        flush_output. 
    119116 
    120  
    121     %?- between(0, inf, N), show(N, [ff], Qs). 
     117    %?- show(N, [ff], Qs). 
    122118 
    123119    %?- show(8, [ff], Qs). 
  • trunk/examples/constraints/swipl/SCRIPT.txt

    r4415 r4416  
    6161 
    6262 
     63| ?- queens::n_queens(8, Qs), labeling([ff], Qs). 
     64Qs = [1, 5, 8, 6, 3, 7, 2, 4] ; 
     65Qs = [1, 6, 8, 3, 7, 4, 2, 5] ; 
     66Qs = [1, 7, 4, 6, 8, 2, 5, 3] ; 
     67(etc) 
     68 
     69 
    6370% the following query implies that Ghostscript is available from the command-line: 
    6471 
    6572| ?- queens::show(8, [ff], Qs). 
    66  
    6773Qs = [1, 5, 8, 6, 3, 7, 2, 4] ; 
    6874Qs = [1, 6, 8, 3, 7, 4, 2, 5] ; 
    6975Qs = [1, 7, 4, 6, 8, 2, 5, 3] ; 
    70 Qs = [1, 7, 5, 8, 2, 4, 6, 3] ; 
    7176(etc) 
     77 
     78 
     79| ?- queens::show(N, [ff], Qs). 
     80N = 1, 
     81Qs = [1] ; 
     82N = 4, 
     83Qs = [2, 4, 1, 3] ; 
     84N = 4, 
     85Qs = [3, 1, 4, 2] ; 
     86N = 5, 
     87Qs = [1, 3, 5, 2, 4] ; 
     88(etc)