FABRICE MARCHANT < FABRICE.MARCHANT%40ORANGE.FR">FABRICE.MARCHANT
ORANGE.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
.