RosettaCodeData/Task/Ordered-words/CLU/ordered-words.clu
2023-07-01 13:44:08 -04:00

43 lines
1.1 KiB
Text

is_ordered = proc (s: string) returns (bool)
last: char := '\000'
for c: char in string$chars(s) do
if last > c then return(false) end
last := c
end
return(true)
end is_ordered
lines = iter (s: stream) yields (string)
while true do
yield(stream$getl(s))
except when end_of_file: break end
end
end lines
ordered_words = proc (s: stream) returns (array[string])
words: array[string]
max_len: int := 0
for word: string in lines(s) do
if is_ordered(word) then
len: int := string$size(word)
if len > max_len then
max_len := len
words := array[string]$[]
elseif len = max_len then
array[string]$addh(words,word)
end
end
end
return(words)
end ordered_words
start_up = proc ()
dict: stream := stream$open(file_name$parse("unixdict.txt"), "read")
words: array[string] := ordered_words(dict)
stream$close(dict)
po: stream := stream$primary_output()
for word: string in array[string]$elements(words) do
stream$putl(po, word)
end
end start_up