List Info

Thread: "ocaml_beginners"::[] Re: tail recursion




"ocaml_beginners"::[] Re: tail recursion
country flaguser name
Norway
2008-03-11 04:13:55

FABRICE MARCHANT < FABRICE.MARCHANT%40ORANGE.FR">FABRICE.MARCHANTORANGE.FR> WRITES:
> LET APPEND =
> LET REC RAPPEND = FUNCTION
> [] -> ID
> | H::T -> RAPPEND T <<- (CONS H) IN
> RAPPEND <<- LIST.REV

THERE IS A PROBLEM ON THIS CODE: IT IS NOT POLYMORPHIC ENOUGH, JUST
TRY

RAPPEND [2] [3];;
RAPPEND [NONE] [];;

IF YOU WANT A FULLY POLYMORPHIC VERSION, YOU NEED TO WROTE IT AS :
LET APPEND L =
LET REC RAPPEND = FUNCTION
[] -> ID
| H::T -> RAPPEND T <<- (CONS H) IN
(RAPPEND <<- LIST.REV) L

WHICH DEFEAT YOUR GOAL.

>
>; IT IS THE OPPORTUNITY TO ASK THIS :
> I WONDER IF THIS LATER IS PERFECTLY EQUIVALENT TO THE FORMER ?

NOT SURE

> IS IT ABSOLUTELY TRUE THAT THE 3 TINY FUNCTIONS ID, CONS AND ( <<- )
> WILL BE INLINED WITHOUT ANY EFFICIENCY LOSS ?

NOT SURE, WELL, NOT WITH BYTECODE, I DON'T KNOW WITH OCAMLOPT, YOU
SHOULD TEST (OPTION -S TO ASK OCAMLOPT FOR THE ASSEMBLY CODE).

--
RéMI VANICAT

__._,_.___
.

__,_._,___
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )