|
|
— |
pl:prolog:pllib:dutch_flag_2 [2019/06/27 15:50] (aktualna) |
| ====== Dutch flag 2 ====== |
| {{tag>problem_solving}} |
| ===== Description ===== |
| Dutch Flag with difference-lists. |
| |
| **Source**: The Art of Prolog |
| ===== Download ===== |
| Program source code: {{dutch_flag_2.pl}} |
| ===== Listing ===== |
| <code prolog> |
| /* |
| dutch(Xs,RedsWhitesBlues) :- |
| RedsWhitesBlues is a list of elements of Xs ordered |
| by color: red, then white, then blue. |
| */ |
| :- op(40,xfx,\). |
| |
| dutch(Xs,RedsWhitesBlues) :- |
| distribute_dls(Xs,RedsWhitesBlues\WhitesBlues, |
| WhitesBlues\Blues,Blues\[]). |
| |
| /* |
| distribute_dls(Xs,Reds,Whites,Blues) :- |
| Reds,Whites,Blues are difference-lists of red, white, |
| and blue elements in Xs, respectively. |
| */ |
| |
| distribute_dls([red(X)|Xs],[red(X)|Reds]\Reds1,Whites,Blues) :- |
| distribute_dls(Xs,Reds\Reds1,Whites,Blues). |
| distribute_dls([white(X)|Xs],Reds,[white(X)|Whites]\Whites1,Blues) :- |
| distribute_dls(Xs,Reds,Whites\Whites1,Blues). |
| distribute_dls([blue(X)|Xs],Reds,Whites,[blue(X)|Blues]\Blues1) :- |
| distribute_dls(Xs,Reds,Whites,Blues\Blues1). |
| distribute_dls([],Reds\Reds,Whites\Whites,Blues\Blues). |
| |
| % Program 15.6: Dutch Flag with difference-lists. |
| </code> |
| ===== Comments ===== |
| |