sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #18083
Re: [OT] Sprog - Re: [TEKNIK] Delphi?
Mads Bondo Dydensborg <madsdyd@xxxxxxxxxxxx> writes:
> ... ved at skrive (i ML):
>
> fun fak n = if (n <= 0) then 1 else n * fak (n - 1)
>
> (Pånær syntaks).
Det er syntaktisk fuldstændig korrekt. Man kunne, for pænheds
skyld, fjerne parentesen omkring n <= 0.
> De fleste ML oversættere ville optimere ovenstående halerekursive funktion
> til noget der minder mere om en while løkke. Dette kan jeg ikke
> umiddelbart skrive i ML (men oversætteren kan),
Du kan sagtens skrive while løkker i SML, men det er hverken pænt
eller anbefalelsesværdigt[1]. F.eks. følgende funktion der minder lidt
om din Pascal version (og bruger referencer og den slags utøj):
let fun fak n =
let val nref = ref n
val resref = ref 1
in while !nref > 0 do
(resref := !resref * !nref;
nref := !nref - 1);
!resref
end
in fak 5
end
Herligt at se SML diskuteret i lidt bredere kredse (men du er selvfølgelig
også en DIKU-person :-)).
[1] while er det der hedder en afledt form i Standard ML. Det betyder
at Definition ikke specificerer hvordan den skal types og evalueres,
men i stedet fortæller hvordan man oversætter den til et lidt mindre
``kernesprog'' (the Bare language); de foreskriver faktisk den
halerekursive version.
Mvh
--Henning Niss
Follow ups
References