Różnice
Różnice między wybraną wersją a wersją aktualną.
|
|
— |
pl:prolog:pllib:flatten_3 [2019/06/27 15:50] (aktualna) |
| ====== Flatten 3 ====== |
| {{tag>lists operators}} |
| ===== Description ===== |
| Flattening a list using a queue |
| |
| **Source**: The Art of Prolog |
| ===== Download ===== |
| Program source code: {{flatten_3.pl}} |
| ===== Listing ===== |
| <code prolog> |
| /* |
| flatten(Xs,Ys) :- |
| Ys is a flattened list containing the elements in Xs. |
| */ |
| :- op(40,xfx,\). |
| |
| flatten(Xs,Ys) :- flatten_q(Xs,Qs\Qs,Ys). |
| |
| flatten_q([X|Xs],Ps\[Xs|Qs],Ys) :- |
| flatten_q(X,Ps\Qs,Ys). |
| flatten_q(X,[Q|Ps]\Qs,[X|Ys]) :- |
| constant(X), X \= [], flatten_q(Q,Ps\Qs,Ys). |
| flatten_q([],Q,Ys) :- |
| non_empty(Q), dequeue(X,Q,Q1), flatten_q(X,Q1,Ys). |
| flatten_q([],[]\[],[]). |
| |
| non_empty([]\[]) :- !, fail. |
| non_empty(Q). |
| |
| dequeue(X,[X|Qh]\Qt,Qh\Qt). |
| |
| % Program 15.12: Flattening a list using a queue |
| |
| </code> |
| ===== Comments ===== |
| |