Courses/CS 460/Fall 2005/Notes for Oct 1

From CSWiki

Jump to: navigation, search

The Oz Lists module.

Some list functions.


local
   fun {IsMember X Xs}
      case Xs of
	 nil then false
      [] X1 | Xr then
	 if X == X1 then true
	 else {IsMember X Xr}
	 end
      end
   end
end
local
   fun {RemoveDups Xs}
      case Xs of
	 nil then nil
      [] X | Xr then
	 RDXs = {RemoveDups Xr} in
	 if {IsMember X Xr} then RDXs else X | RDXs end
      end
   end
in 
   {Browse {RemoveDups [2 3 2 4]}}
end
local
   fun {Intersection Xs Ys}
      case Xs of
	 nil then nil
      [] X | Xr then
	 Inter in
	 Inter = {Intersection Xr Ys}
	 if {IsMember X Ys} andthen {Not {IsMember X Inter}} then X | Inter else Inter end
      end
   end
in
   {Browse {Intersection [3 4 5 3] [7 8 5 9 3]}}
end
local
   fun {Append Xs Ys}
      case Xs of
	 nil then Ys
      [] X | Xr then
	 X | {Append Xr Ys}
      end
   end
in
   {Browse {Append [3 4 5] [7 8 9]}}
end
local Ys Zs in
   {List.partition
    [2 3 4 5 6]
    fun {$ X} if X > 3 then true else false end end
       ?Ys ?Zs}
   {Browse Ys#Zs}
end
local
   proc {Fldr Xs F Start Ans}
      case Xs of
	 nil then Start = Ans
      [] X | Xr then
         % Any of the following will work. Similarly for Fldl
%	 {F X {Fldr Xr F Start}} = Ans
%	 Ans = {F X {Fldr Xr F Start}}
	 {F X {Fldr Xr F Start} Ans}
      end
   end
in
   {Browse {Fldr [2 23 54] fun {$ A B} A + B end  0}}
end
local
   proc {Fldl Xs F Start Ans}
      case Xs of
	 nil then Start = Ans
      [] X | Xr then
	 {Fldl Xr F {F Start X} Ans}
      end
   end
in
   {Browse {Fldl [42 23 54] fun {$ A B} A + B end  0}}
end