Hier ein etwas anderer (
) Code (und nicht einmal Pseudo-):
Code:
run(A) :- small_straight(A), !.
run(A) :-
remove_one(A, B),
small_straight(B),
!.
small_straight([_]) :- !.
small_straight([A,B|Rest]) :-
1 is B-A,
small_straight([B|Rest]).
remove_one([A,B|Rest], [A|Rest]) :- %front
not(1 is B-A).
remove_one([A,B|Rest], [B|Rest]) :- %back
not(1 is B-A).
remove_one([A|Rest], [A|Return]) :-
remove_one(Rest, Return).
Ineffizient, aber logisch.
(Prüft auf n-1 aufeinanderfolgende Zahlen in einer aufsteigend sortierten Liste der Länge n.)