Skip to content

Instantly share code, notes, and snippets.

@devnoo
Created December 5, 2011 19:17
Show Gist options
  • Select an option

  • Save devnoo/1434853 to your computer and use it in GitHub Desktop.

Select an option

Save devnoo/1434853 to your computer and use it in GitHub Desktop.
seven languages in seven weeks prolog day 2
my_sort(List, Result) :-
my_sort(List, [], Result).
my_sort([], SortedList,SortedList).
my_sort([Head|Tail], SortedList, Result) :-
insert(Head, SortedList, SubResult),
my_sort(Tail, SubResult, Result).
insert(ElementToInsert, [], [ElementToInsert]).
insert(ElementToInsert, [FirstElement|Rest], [FirstElement | SubResult]) :-
ElementToInsert > FirstElement,
insert(ElementToInsert, Rest, SubResult ).
insert(ElementToInsert, SortedList, [ElementToInsert | SortedList]) :-
[FirstElement|_] = SortedList,
ElementToInsert =< FirstElement.
reverse_list([], []).
reverse_list([Head|Tail], [ResultForTail|Head])
:- reverse_list(Tail, ResultForTail).
smallest([X],X).
smallest([A,B|Rest],Minimum) :- (A < B), smallest([A|Rest],Minimum).
smallest([A,B|Rest],Minimum) :- (B =< A), smallest([B|Rest],Minimum).
min(Number1, Number2, Number1) :- Number1 =< Number2.
min(Number1, Number2, Number2) :- Number1 > Number2.
smallest([Head|Tail], Min) :-
smallest(Tail, Head, Min).
smallest([], Min, Min).
smallest([Head|Tail], Min0, Min) :-
min(Head, Min0, Min1),
smallest(Tail, Min1, Min).
min(A, B, A) :- A =< B, !.
min(A, B, B) :- A > B, !.
smallest([A],A) :- !.
smallest([A, B |Rest],Minimum) :- smallest([A |Rest], MinRest), min(B, MinRest, Minimum).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment