49 lines
966 B
Plaintext
49 lines
966 B
Plaintext
functor
|
|
export
|
|
length: Length
|
|
take: Take
|
|
drop: Drop
|
|
append: Append
|
|
member: Member
|
|
position: Position
|
|
define
|
|
fun {Length List}
|
|
case List of _|Tail then (1 + {Length Tail}) else 0 end
|
|
end
|
|
|
|
fun {Take (Head|Tail) Count}
|
|
if Count > 0 then (Head|{Take Tail (Count - 1)}) else nil end
|
|
end
|
|
|
|
fun {Drop (Head|Tail) Count}
|
|
if Count > 0 then {Drop Tail (Count - 1)} else Head|Tail end
|
|
end
|
|
|
|
fun {Append List Other}
|
|
case List
|
|
of X|nil then X|Other
|
|
[] Head|Tail then Head|{Append Tail Other}
|
|
else nil end
|
|
end
|
|
|
|
fun {Member (Head|Tail) Element}
|
|
if Tail == nil
|
|
then false
|
|
else
|
|
if Head == Element
|
|
then true
|
|
else
|
|
{Member Tail Element}
|
|
end
|
|
end
|
|
end
|
|
|
|
fun {Position (Head|Tail) Element}
|
|
if Head == Element
|
|
then 0 % 0-indexed
|
|
else
|
|
1 + {Position Tail Element}
|
|
end
|
|
end
|
|
end
|