RU beehive logo ITEC dept promo banner
ITEC 380
2009fall
ibarland

homeinfolecturesexamshwsarchive

lect12a
prolog: sorting

- Show some industrial scheme code;

- var args

- syntax for calling functions in java;

- prolog:
  append2; append3 using append2; sublist.
 1  % A version of 'reverse' which requires 'removeLast' and 'last':
 2  reverse([],[]).
 3  reverse([F|R],L2) :- last(L2,F), removeLast(L2,L2less), reverse(R,L2less).
 4  
 5  %  removeLast, Last -- not included in notes, 
 6  %  since it's part of hw05  !!
 7  
 8  
 9  
10  %% Alternate version: An accumulator variable:
11  reverse(L1,L2) :- reverseHelp( L1, [], L2 ).
12  
13  %%  [+,+,-]
14  %% reverseHelp(L1,L2,L3): 
15  %% True when: L1 reversed, appended to L2, equals L3.
16  %    First, a less idiomatic solution:
17  % reverseHelp([],RevSoFar,Soln) :- RevSoFar = Soln.
18  % reverseHelp(Lst, RevSoFar, Soln) :-
19  %    Lst = [Frst,Rst],
20  %    reverseHelp( Rst, [Frst,RevSoFar], Soln ).
21  
22  % Here is the same thing, in idiomatic Prolog:
23  % We just move the "=" clauses into the definitions:
24  %
25  reverseHelp([], RevSoFar, RevSoFar).
26  reverseHelp([Frst|Rst], RevSoFar, Out) :- 
27      reverseHelp(Rst, [Frst|RevSoFar], Out).
28  
29  
30  %% [+,+,-]
31  %% filterSmallerThan( Threshold, Lst, Result ):
32  %% True when 'Result' is all the elements of 'Lst' which
33  %% are less than Threshold.
34  
35  %    First, a less idiomatic solution:
36  % filterLessThan(Threshold,Lst,Answer) :- Lst=[], Answer=[].
37  % filterLessThan(Threshold,Lst,Answer) :- 
38  %     Lst = [Frst,Rst],
39  %     Frst >= Threshold, 
40  %     filterLessThan(Threshold,Rst,SmallRest),
41  %     Answer = SmallRest.
42  % filterLessThan(Threshold,Lst,Answer) :- 
43  %     Lst = [Frst,Rst],
44  %     Frst < Threshold, 
45  %     filterLessThan(Threshold,Rst,SmallRest),
46  %     Answer = [Frst|SmallRest].
47  
48  % Here is the same thing, in idiomatic Prolog:
49  % We just move the "=" clauses into the definitions:
50  %
51  filterLessThan(Threshold,[],[]).
52  filterLessThan(Threshold,[Frst|Rst],SmallRest) :- 
53        Frst >= Threshold, 
54        filterLessThan(Threshold,Rst,SmallRest).
55  filterLessThan(Threshold,[Frst|Rst],[F|SmallRest]) :- 
56        Frst < Threshold, 
57        filterLessThan(Threshold,Rst,SmallRest).
58  
59  

homeinfolecturesexamshwsarchive


©2009, Ian Barland, Radford University
Last modified 2009.Nov.16 (Mon)
Please mail any suggestions
(incl. typos, broken links)
to iba�rlandrad�ford.edu
Powered by PLT Scheme