sslug-teknik team mailing list archive
-
sslug-teknik team
-
Mailing list archive
-
Message #18075
Sprog - Re: [TEKNIK] Delphi?
On Wed, 2 Feb 2000, Ole Kofoed Hansen wrote:
> Mads Bondo Dydensborg <madsdyd@xxxxxxxxxxxx> skrev:
> >Hvis du vil lære noget, skal du altså være i stand til at abstrahere fra
> >sproget.
> >
> >På datalogi starter man med at lære folk ML.
> >
> >ML:
> >fun fak 0 = 1
> > | fak n = n * fak(n - 1)
> >
> >Alle tre programmer har (pånær syntaksfejl) det samme problem....
>
>
> Nu bliver jeg nysgerrig...Hvilket problem tænker du på?
>
> Mine bud er:
> 1) Den kan risikere at bruge en pokkers masse resourcer,
> hvis man kalder den med et højt tal.
> 2) Skaber en uendelig løkke, hvis man kalder den med
> et negativt tal. (Eller ryger gennem bunden på variablen.)
> eller
> 3) Ingen kontrol af input. (Dvs. begge de to andre plus eventuelt
> endnu uopdagede fejl som følge af ugyldig inddata.)
Jeg skulle nok have skrevet "problemer" - det jeg primært tænkte på var at
funktionerne ikke terminerer på negativt input, hvilket, lidt slammet,
kunne rettes ved at skrive (i ML):
fun fak n = if (n <= 0) then 1 else n * fak (n - 1)
(Pånær syntaks).
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), men i Pascal bliver det
til noget i den her stil
function fak (n : integer) : integer
function fak_ (n : integer) : integer
var
tmp : integer;
begin
tmp := 1;
while (n > 1) do
begin
tmp := tmp * n;
dec(n);
end
fak_ := tmp;
end;
begin
if (n > 1) then
fak := fak_(n)
else
fak := 1;
endif;
end;
For C og pascal programmet ville der nok være (i praksis) et lager problem
for store tal, _men_ heldigvis ville programmet overflowe lang tid inden
(for alle 3 sprog, de fleste platforme) :-)
Bemærk, at netop diskussionen om funktionernes svagheder og styrker kan
føres uafhængigt af sproget. Den næste opgave, ville være at lave en
funktion der var i stand til at beregne fak af meget store (vilkårligt
store) tal. Det ville indebære noget repræsentation, mv, som måske ville
begynde at blive lidt sprogspecifik; I ML ville man nok lave lister, i
Pascal, C arrays. I perl, lister, eller hashes, eller hvad ved jeg.
_Problemet_ og _løsningen_ er interessant. _Sproget_ er blot et værktøj,
især når man skal lære om programmering, algoritmer, mv.
Mads
--
Mads Bondo Dydensborg. madsdyd@xxxxxxxxxxxx
At some point, bits have to go into packets and routers need to make
decisions on them. Changes at that level is what I want to hear about, not
strategic company relationships.
- John Carmack, commenting on why he (for now) does not actively support
the PowerPlay initiative
Follow ups
References