"ERIC LAVIGNE" < LAVIGNE.ERIC%40GMAIL.COM">LAVIGNE.ERIC
GMAIL.COM> WRITES:
>> SUPPOSE I HAVE A FUNCTION THAT RETURNS AN OPTION TYPE. I WANT TO
>> APPLY F TO EACH ITEM IN A LIST UNTIL I FIND A NON-NONE RESULT, THEN
>> RETURN THAT UNDERLYING VALUE. THE CODE IS SIMPLE:
>>
>> LET REC FIND_SOME F = FUNCTION
>> | X :: REST -> (MATCH F X WITH SOME Y -> Y | NONE -> FIND_SOME F REST)
>> | [] -> RAISE NOT_FOUND
>
> THE FOLLOWING IMPLEMENTATION IS TAIL-RECURSIVE.
THE ABOVE IMPLEMENTATION WAS TAIL-RECURSIVE TOO.
[...]
> LET REC FIND_FIRST F = FUNCTION
> | X :: REST -> (MATCH F X WITH SOME Y -> SOME Y | NONE -> FIND_SOME F REST)
> | [] -> NONE
>
--
RéMI VANICAT
.