nclos m (m, u, ne) e ? args ? ) s? ???s ??????? r???????t ???????s? (nUnknown (m + 1) ?)? u ?st ?? tr????t??? ?? t? s? ?? ????r? ???r?????ts ?é?à ??ssés |args| ?st ???ér???r à ???r?té ?? ?? ??r??t?r? ?é??rr??é?? s? args ??rr?s???? à args ? ??s?à???s ?? (nUnknown (|args|)[]) ?t s? ??sm) n!? ?r? ?? s????t ???? t?r?? ???s ?s??s ??r????? ???r??? ??????r ,
s ??s tr??s ?r??r?étés s?????t?s ? ?? ?é??rr????t??? ??rt??é? ? s? µe ? t a ? (t, µe a ) ?t µe ? ? ne ???rs ?nv a , ne ? [[t a ]] ? ? nv a ?t (t, µe a ) ? nv a ? s? µe ? t b ? µv b ?t µe ? ? ne ???rs ?nv b , ne ? [[t b ]] ? ? nv b ?t µv b ? nv b ? s? µv b :: µe a ? t ? µv ?t µv b :: µe a ? ? ? ne ? ???rs ?nv ,
(µclos m b µe a1 args)? ?? ????t nv a = (nclos m (m, u, ne a1 ) ne c args ? ) ?ù µe a1 ? ?a 1 ne a1 , |args| ? m ?t args ? nUnknown (m+1) [] args ? ?t µe a1 ? ?a 1 ne a1 ? ???s ?????s ??st?????r s??, µclos m b µe a1 (µv b :: args)) ?t nv = (nclos m (m, u, ne a1 ) ne c (nv b :: args ? )) ?t ?? rés??t?t s? ?é???tr? ??r ??? ???????t??? ?? ?? rè??? ??é?????t??? ?? ?????????t??? ??? ?t ?? ???tr??t ??r ???str??t??? (µclos m b µe a1 µv b :: args) ? (nclos m (m, u, ne a1 ) ne c (nv b :: args ? ))? ,
nv b :: args ? )@ne a1, nv b :: args ? )@ne a1 ) ? u ? nv ?t µv ? nv? ????????t ?? tr????t??? ?? t a ?st ?? ?? ,
(nv b :: args ? :: (m, u, ne a1 ))@ne c )? P??r ???? ???s ?t???s??s ?? rés??t?t ??t?r?é????r? s?????t ? ?? |args| = n ?t (v :: args)@me ? m ? vres ???rs (v :: args ? )@((n, m, me) :: e ? ) ? (n + 1)![n! ,
? = n! [[args]] ? ? t a = napp n! args ?t q?? ?(n) = Known |args|? ?? ???s? ??t??s [[args]] ? = nargs? ???s ????s µe ? ? ne? ?? ????t µe(n) = (µclos |args| b e ? [])? ?? ?à? ???s ?t???s??s ?? ??rr?s, ) = (|args|, u, ne ? ) ?t (µclos |args| t e ? []) ? (Known |args|) (|args|, u, ne ? )? ???s ????s ?? ????t?ès? µe ? napp n! args ? (t ? , e) ,
= (µclos |args| t e ? (rev vargs)) s? µe(n) = (µclos |args| b e ? []) ?t µe ? args ? vargs? ?? ???s? ???s s????s q?? ?? tr??s??r??t??? ?? t a ?st ??? ???r???t??? ?? m ???????t???s ??rr??é?s ?? n! ??? é?é???ts ?? nargs ?NCurry(|args|) n!) nargs? ?? ?t???s??t ??????t?ès? ???????t??? ?ss???é? à ??é?????t??? ?? t a ? ???s ??t????s ? ne ? ?t (µclos |args| t e ? (rev vargs)) ? nv a ? ???s ?ss????s ???? ???? s????r ?? ??? ???s s?r nv a ? ?? s??t q?? ne ? (NCurry(|args|) n!) ? (nclos |args| (|args|, u, ne ? ) ne []) ??? ?? rè??? ?????????rr??? ?? ???s? ?? ne ? Nnapp (NCurry(|args|) n!) nargs ? nv 1 ? ?? ?é???t ? ?nvargs, ne ? nargs ? nvargs ?t nv a = (nclos |args| (|args|, u, ne ? ) ne (rev nvargs))? ???s ????s ?, tr? ??r??t?r?s µ?? ?t ??? s?????t? ? (µclos |args| t µe ? (rev vargs)) ? (nclos |args| (|args|, u, ne ? ) ne (rev nvargs))? ???? q?? ???s ????s ??r??tér?sé ??s ??r??t?r?s? ???s ?????s tr??t?r ??s ???? rè???s ??????s??t à ??? ??rr?s???????? ?? ,
0!] ? nv? ?r ???s ????s à ???tr?r ? ?nv, (nv2 :: (rev nvargs)@ne) ? u ? nv? ???s ????s ?? rés??t?t s?????t ? ?? |args| = n ?t (nv2 :: (rev nvargs)@(n, u, ne ? ) :: e ? ) ? (m + 1)! [m!; . . . ; 0!] ? nv ???rs (nv2 :: (rev nvargs)@ne) ,
?s t 1 ???s ?? t?r?? t 2 ? ?? ?????? ?? ??é?????t???? ?? ???s ???t ????t?r ??s ?????rs ?? ??r??t?r?s ré??rs???s (t, e) rec ???s? q?? ???? rè???s ??é?????t???s s????????s à, m, me) rec s? ??s, rev vargs)@e ? ) ? (nUnknown (|args|+1) ?) (nv ,