A InfoWiki wikiből
(Változatok közti eltérés)
|
|
1. sor: |
1. sor: |
- | <cim cim1="TITAN-M Példák" cim3="ACKER függvény" prev="-" next="titan:nfib" back="titan:titan-m" szerzo="hz|Hernyák Zoltán" kep="hz_csik.png"/>
| |
| | | |
- |
| |
- | <code lang="csharp">
| |
- | Acker(Int,Int)->Int
| |
- | Acker(0,j) = j + 1
| |
- | Acker(i,0) = Acker(i-1, 1)
| |
- | Acker(i,j) = Acker(i-1, Acker (i,j-1))
| |
- | </code>
| |
- |
| |
- | A függvény törzse nem többször kerül definiálásra, mindössze mintaillesztés történik.A fordítónak figyelnie kell, hogy minden minta-kombinációra van-e törzs kidolgozva.
| |
- |
| |
- | A függvény típusdefiníciós sorát (első sor) onnan lehet felismerni, hogy a paraméterlistában típus-nevek fordulnak elő, és -> is szerepel az output típus megadásakor.
| |
- |
| |
- | A minta (pattern) illesztésénél a lehetséges input paraméterek lehetséges értékeire adunk más-más viselkedésű függvény-törzseket. A fenti Acker-függvény C# változata az alábbi lehetne:
| |
- |
| |
- | <code lang="csharp">
| |
- | static int Acker(int i, int j)
| |
- | {
| |
- | if (i==0) return j+1;
| |
- | if (j==0) return Acker(i-1,1);
| |
- | return Acker(i-1, Acker(i,j-1));
| |
- | }
| |
- | </code>
| |
Aktuális változat