← Back to team overview

sslug-teknik team mailing list archive

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