Courses/CS 460/Fall 2005/Notes for Oct 1
From CSWiki
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

