Sujet : Re: TeX and Pascal [was Re: The joy of FORTRAN]
De : ram (at) *nospam* zedat.fu-berlin.de (Stefan Ram)
Groupes : alt.folklore.computers comp.os.linux.miscDate : 01. Oct 2024, 12:02:39
Autres entêtes
Organisation : Stefan Ram
Message-ID : <polymorphism-20241001105522@ram.dialup.fu-berlin.de>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
John Ames <
commodorejohn@gmail.com> wrote or quoted:
rather than having to remember the distinction between:
void sliceApple(apple * f)
and:
void slicePear(pear * f)
one could simply write:
fruitPile[i++].slice();
and trust that the Right Thing will be done.
Ah! I think this is called "polymorphism".
I wondered whether something like this could
also be formulated in Pascal.
(Unintentionally, I return to the topic
of the subject somewhat.)
PROGRAM ANIMALSOUNDS( OUTPUT );
TYPE
ANIMALTYPE =( DOG, CAT );
ANIMAL = RECORD
ANIMALKIND: ANIMALTYPE;
END;
FUNCTION SOUND( ANIMAL: ANIMAL ): STRING;
BEGIN
CASE ANIMAL.ANIMALKIND OF
DOG: SOUND := 'WOOF!';
CAT: SOUND := 'MEOW!';
END;
END;
VAR MYDOG, MYCAT: ANIMAL;
BEGIN
MYDOG.ANIMALKIND := DOG;
MYCAT.ANIMALKIND := CAT;
WRITELN( 'IT SAYS: ', SOUND( MYDOG ));
WRITELN( 'IT SAYS: ', SOUND( MYCAT ));
END.
Output:
IT SAYS: WOOF!
IT SAYS: MEOW!