NYOMKÖVETÉS KIÍRÁSSAL: LISTÁK



Hasonló dokumentumok



ű ű ű ű ű Ü ű ű Ü Ő












Ö






ő ú ö ű ő ö ő ö ö ö ű ö ö ű





ú ü Ü Ö ü ő ő ő Ú Ú Ö Ú


Ö Ü Ú Ö ű ű Ö ű ű ű ű Ú


Ú Ú ű ű Ú Ó Ú Ü





ü Í Ö ö ö ö


ű ű Ú Ö ű ű Ú ű ű

ű ű ű ű ű ű ű ű ű ű ű ű ű ű ű ű ű






ü ó ó ü ű ö Ö ö ü ö ü ö ö ü ö ú ü í ó ó ó Ö ó ü Ö ö ü ö ú ü í ó ü ö ü ö ú ü ö í ú ö í ú ü í ú ü í ú í ú ö ó ü Ö ö ü ó í ü ó ó ű í í ó ö ö ö í ú ö ü í


ó í ö ö ö ü ö ö ö ü ü ó ö í ü í í í ö ö ö ö í ü ü ö ö í ü ö í ó í í ü ü ü ó ö í ü ü ü ó ü í í ö ü ó í ö ü ü ü ú í ú ü ö ü ó í ö ü í
















Á Á ü Ö Á Á Á ü ö ü ü ö ö ö ö ü Á ü ü






















Ö É ú ú Ú Ú Ö ú É ű Ó Ú ú ú ú Ó Ú ű Ó ú ú ú ű Ú


ü ü ü ü ü ü ű ü ü ü ü ü ü ü ü ü ü ű ű Ü ü ü ü ü

ű ű Ú Ú ű Ö Ö Ó ű ű Ú É Ö











ü ö Ö ü ó ü ö ö Ö ü ü ö Ö ü ö ó ü ö ó í ó ö ö ó í ű ü ü í ó ö ü ö í ü ö ó ö ü ü ó ö í ö í ü Ő ö ű ü ö Ö ü ó ü ö


Átírás:

NYOMKÖVETÉS KIÍRÁSSAL: LISTÁK Nyomkövetés kiírással:ð Ò Ø (nem iteratív) ÙÒÐ Ò Ø Ü µ ½ Ð Ò Ø Ü Példa: að Ò Ø függvény két változatának kiértékelése AÐ Ò Ø naív ÙÒÐ Ò Ø Òص Ü µ Ð Ò Ø ¼ változata ÔÖ ÒØÎ Ð ½ ÔÖ ÒØ ² ÔÖ ÒØÎ Ð Ð Ò Ø ÔÖ ÒØÎ ÐÜ µµ ÓÖ ÔÖ ÒØ Ò µ µ ÓÖ ÔÖ ÒØ Ð Ò Ø ÔÖ ÒØ ÔÖ ÒØΠм ÓÖ ÔÖ ÒØ ± Ò µ Nyomkövetés kiírással FP-5-hknyk-2 Az mosml-ben nyomkövetés csak a program szövegébe beírt kiíró függvényekkel lehetséges. AÐ Ò Ø naív változata kiíró függvényekkel (félkövér szedéssel az eredeti szöveg látható)

ÙÒÐ Ò Ø Ü Ð Ø ÙÒÐ Ò Ü µ Ð Ò ½ Ü µ ÒÐ Ò ¼ Ü µ Nyomkövetés kiírással:ð Ò Ø (iteratív) Ò Ð Ò µ AÐ Ò Ø iteratív változata ÙÒÐ Ò Ø Ü Ð Ø ÙÒÐ Ò Òص Ü µ Ð Ò ÔÖ ÒØ ÔÖ ÒØÎ Ð ÔÖ ÒØÎ Ð µ ÓÖ ÔÖ ÒØ Ò ÔÖ ÒØ ² ÔÖ ÒØÎ ÐÜ µ ÓÖ ÔÖ ÒØ µ ½µµ ÒÐ Ò ¼ Ü µ Ò Ð Ò µ ÔÖ ÒØ ÔÖ ÒØÎ Ð ÓÖ ÔÖ ÒØ ± Ò µ Nyomkövetés kiírással FP-5-hknyk-3 AÐ Ò Ø iteratív változata kiíró függvényekkel (félkövér szedéssel az eredeti szöveg látható) ÙÒÐ Ò Ø Òص Ü µ ÔÖ ÒØÎ Ð ½ ÔÖ ÒØ ² ÔÖ ÒØÎ Ð Ð Ò Ø ÔÖ ÒØÎ ÐÜ µµ Nyomkövetés kiírással FP-5-hknyk-4 Ð Ò Ø egy ÓÖ ÔÖ ÒØ Ò µ µ ÓÖ ÔÖ ÒØ alkalmazása Ð Ò Ø ½ ¾ Ð Ò Ø ÔÖ ÒØ ÔÖ ÒØΠм ² ¾ ² ² ¼± ÓÖ ÔÖ ÒØ ± Ò µ ¼ ½ ½ ¾ ¾ Nyomkövetés kiírással:ð Ò Ø egy alkalmazása

ÙÒÐ Ò Ø Ü Ð Ø ÙÒÐ Ò Òص Ü µ Nyomkövetés kiírással Ð Ò ÔÖ ÒØ ÔÖ ÒØÎ Ð ÔÖ ÒØÎ Ð ÔÖ ÒØ ² ÔÖ ÒØÎ ÐÜ µ ÓÖ ÔÖ ÒØ µ ½µµ Ð Ò Ø egy alkalmazása Ð Ò µ ÔÖ ÒØ ÔÖ ÒØÎ Ð µ ÓÖ ÔÖ ÒØ Ò ÒÐ Ò ¼ Ü µ Ò ÓÖ ÔÖ ÒØ ± Ò µ Ð Ò Ø ½ ¾ Nyomkövetés kiírással:ð Ò Ø egy alkalmazása ¼ ½² ¾ ½ ¾² ¾ ² ± FP-5-hknyk-5 Deklaratív Ð Ò Ø ½ ¾ programozás. BME VIK, 2006. tavaszi félév ¼ ½ ½ ¾ ¾ ² ¾ ² ² ¼± Ð Ò Ø ½ ¾ ¼ ½² ¾ ½ ¾² ¾ ² ± Nyomkövetés kiírással FP-5-hknyk-6 Nyomkövetés kiírással:ð Ò Ø ésð Ò Ø összehasonlítása Ð Ò Ø ésð Ò Ø kiértékelésének összehasonlítása

HIBAKERESÉS ÉS NYOMKÖVETÉS POLY/ML-BEN FP-5-hknyk-8 Töréspontot elhelyezni csak olyan segédfüggvényben lehet, amelyet egy másik függvény törzsében egyð Ø-kifejezésben definálunk (példákat a következő diákon mutatunk). A hibakeresést és nyomkövetést először aèóðýåäº ÓÑÔ Ð Öº Ù kapcsolóøöù értékre állításával engedélyezni kell (ld. a következő diát), majd definiálni kell azokat a függvényeket, amelyek működését követni akarjuk, vagy amelyekben töréspontot akarunk elhelyezni. (Ellenkező esetben a hibakereséshez és nyomkövetéshez szükséges plusz kódot a Poly/ML értelmező nem írja bele a lefordított programrészbe.) að Ò Ø A politípusúnak definiált nevek értékét nem tudják kiírni a hibakeresés kiíró függvényei (ÈÓÐÝÅĺ Ù ºÚ Ö Ð µ,èóðýåäº Ù º ÙÑÔ µ,èóðýåäº Ù º Ø µ lásd a következő diákon). Ahhoz, hogy egy név értékét ezek a függvények kiírják, a névnek már a függvény definiálásakor monotípusúnak kell lennie. (Egy nevet, ha a szövegkörnyezetből nem vezethető le a típusa, típusmegkötéssel tehetünk monotípusúvá.) A Poly/ML fontosabb hibakereső függvényeit lásd a következő dián (konkretizálva és að Òfüggvényre utaló hivatkozásokkal). AÈÓÐÝÅĺÔÖÓ Ð Ò Òع ÙÒ Øfüggvénnyel egy kifejezés kiértékelési idejét, ill. egyes függvények futási idejét és helyfoglalását monitorozhatjuk (részletek a Poly/ML-leírásban olvashatók).

ÓÔ ÒÈÓÐÝÅĺ Ù ÈÓÐÝÅĺ ÓÑÔ Ð Öº Ù ØÖÙ ÓÒØ ÒÙ µ Ö ÁÒ Ð Ò Ö ÁÒ Ð Ò Ø µð Ò (folyt.) ÓÛÒ µ ÙÔ µ Hibakeresés ÙÑÔ µ Ø µ Töréspont elhelyezése, rövid változat Ú Ö Ð µ Töréspont elhelyezése, teljes változat Ð ÖÁÒ Ð Ò Ø µð Ò Folytatás a töréspont következő előfordulásáig ØÖ ØÖÙ Áttérés az előző hívási szintre a veremben Ø Ô µ Áttérés a következő hívási szintre a veremben Ø ÔÇÚ Ö µ A verem teljes tartalmának kiírása Ø ÔÇÙØ µ A hívások kiírása a veremtartalom alapján A nevek értékének kiírása Töréspont törlése, teljes változat Nyomkövetés bekapcsolása Adott hívási szinten tovább vagy beljebb Adott hívási szinten tovább Előző hívási szintre vissza Ö ÁÒésÐ ÖÁÒkonkrétan að Ò Ø és að Òfüggvényre hivatkozik a fenti felsorolásban. Használatukról részletesebben itt lehet olvasni: ØØÔ»»ÛÛÛºÔÓÐÝÑкÓÖ» Ó» Ù Ò º ØÑÐ. ÙÒÐ Ò Ø Þ Ð Ò Ø ³ Рع ÒØ Ð Ò Ø Þ Þ Ð Ñ Ò Þ Ð Ø Ð Ò ³ Рع ÒØ Első példa ÙÒÐ Ò Ð ÒÜ ÞÜ Ð Ñ Ò Þ Ñ µ Ñ µ a Poly/ML debugger ¼ használatára Ö ÁÒ Ð Ò Ø µð Ò ÒÐ ÒÞ Ò Ð Ò Ü µ ½ Ð ÒÜ Ú Ð Ø µ ÙÒ Ø Ù Ú Ö Ð µ Ð Ò Ø ÜÔÐÓ µ Ú ÐÜ Ú ÐÞ ººº Ð Ò ÙÒØ ÓÒ Ð Ò Ø µð Ò Ù Ú Ð Ø µ ÙÒ Ø engedélyezése; engedélyezett állapotban kell definiálni a vizsgálandó függvényt Hmm. Politípusúnak definiált értéket a Poly/ML hibakeresője nem tud kiírni? FP-5-hknyk-9 FP-5-hknyk-10

Ð Ò Ø ÖРع ÒØ µ ÙÒÐ Ò Ø Þ ÖРص Első példa Ð Ø Ð Ò ÖРع ÒØ µ a Poly/ML debugger használatára (folyt.) ÒÐ ÒÞ Ò ÙÒÐ Ò Ð Ò Ü ÖРص ½ Ð ÒÜ ¼ Ö ÁÒ Ð Ò Ð Ò Ø ÜÔÐÓ µ Ú Ö Ð µ ÓÒØ ÒÙ µ Ú Ö Ð µ Ú ÐÜ Ú ÐÞ ººº Ù Ú ÐÜ Ú ÐÞ ººº Ð Ò ÙÒØ ÓÒ Ð Ò Ø µð Ò ÙÒÐ Ò Ø Þ Ð Ò Ø ³ Рع ÒØ Ð Ò Ø Þ Þ Ð Ñ Ò Þ Első példa Ð Ø Ð Ò ³ Ð Ø Òع ÒØ a Poly/ML debugger használatára (folyt.) ÙÒÐ Ò Òµ Ñ µ Ð Ò Ø egy hibás Ð Ò Ü Òµ Ð Ò Ü Òµ Ð ÒÜ Ò ÞÜ Ð Ñ Ò Þ Ñ ¹¹ÀÁ ýë µ változata a hibakeresés kipróbálásához ÒÐ Ò Þ ¼µ Ò ÙÒÐ Ò Ø Þ ÖРص Ð Ò Ø ÖРع ÒØ Ð Ò Ø Þ Þ Ð Ñ Ò Þ Ð Ø Ð Ò ÖÐ Ø Òع ÒØ ÙÒÐ Ò Òµ Ñ µ Ð Ò Ø egy másik Ð Ò Ü ÖÐ Ø Ò Òص Ð Ò Ü Òµ Ð ÒÜ Ò ÞÜ Ð Ñ Ò Þ Ñ ¹¹ÀÁ ýë µ hibás változata a hibakeresés kipróbálásához ÒÐ Ò Þ ¼µ Ò Nem bizony! A nevek típusát pl. típusmegkötéssel meg kell adni ahhoz, hogy az értékek kiírásához szükséges kód fordítási időben beépüljön a lefordított programba. FP-5-hknyk-11 FP-5-hknyk-12

Ñ ÜÐ ØÖ Ò ØÖ Ò ¹ ØÖ Ò µ¹ ØÖ Ò Ð Ø¹ ØÖ Ò ÙÒÑ ÜÐÑ ÜÞ Ð Ø ÙÒÑÜÐ ÆÇÆ Ñ ÜÐÑ ÜÞ Þ Ð Ø Ñ Ü Þ Ö ÒØÐ Ò ÝÓ Ð Ñ µ FP-5-hknyk-13 Második példa ÒÑÜÐÞ ÑÜÐ Ò Ñ Ò µ ÑÜÐ Ñ Ü Ò ØÖ Ò Ñµ Ò µ ÑÜÐ Ò ËÇÅ Ò a Poly/ML debugger használatára ÙÒ ØÖ Ò Å Ü ØÖ Ò Øµ ØØ Ò Ð Ø ØÖ Ò Å Ü ØÖ Ò ØÖ Ò ¹ ØÖ Ò ØÖ Ò Å Ü Øµ Ø Þ Ð Ò ÝÓ µ Ò Ù Ö ÁÒ ÑÜÐ ÓÒØ ÒÙ µ Ñ ÜÐ ØÖ Ò Å Ü Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò Ó Ø Þ Ú Ð Ø µ ÙÒ Ø Ð Ò ½ ÙÒØ ÓÒ Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð Hibakeresés töréspont elhelyezésével Ù Ø Ô µ Ú Ð Ø µ ÙÒ Ø Ù FP-5-hknyk-14 Második Ø Ô µ Ð Ò ÙÒØ ÓÒ ØÖ Ò Å Ü példa a Poly/ML debugger használatára (folyt.) Ú Ð Ø µ ÙÒ Ø Ù Ø Ô µ Ú Ð Ø µ ÙÒ Ø Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð Ù Ú Ö Ð µ Ú ÐØ Ñ Ø Þ Ú Ð Ô Ð Ò ÙÒØ ÓÒ ØÖ Ò Å Ü Ù Ø Ô µ Ú Ð Ø µ ÙÒ Ø Ú Ð Ø µ ÙÒ Ø Ù Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð

Ø ÔÇÚ Ö µ Ú Ð Ø µ ÙÒ Ø Ù Második Ú Ö Ð µ Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð példa a Poly/ML debugger használatára (folyt.) Ú ÐÒ Ô Ú ÐÑ Ó Ø Þ Ú ÐÒ Ú ÐÞ Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò ººº Ú ÐÑ Ü Ò ÓÒØ ÒÙ µ Ú Ð Ø µ ÙÒ Ø Ù Ø µ Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñü𠺺º Ð Ò ÙÒØ ÓÒ Ñ ÜÐ µñüð Ð Ò ÙÒØ ÓÒ Ñ ÜÐ Ú Ö Ð µ ÙÑÔ µ Ú ÐÒ Ô Ú ÐÞ Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò ººº ÙÒØ ÓÒÑ ÜÐ µñüð Ú ÐÒ Ô Ú ÐÞ Ú ÐÑ Ü Ò Második példa a Poly/ML debugger használatára (folyt.) ÙÒØ ÓÒÑ ÜÐ µñüð Ú ÐÒ Ô Ú ÐÑ Ó Ø Þ Ú ÐÒ ÙÒØ ÓÒÑ ÜÐ µñüð Ú ÐÒ Ô Ú ÐÑ ÓÐÒ ÔÙØ Ò Ú ÐÒ Ó Ø Þ Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò ººº Ú ÐÑ Ü Ò ÙÒØ ÓÒÑ ÜÐ µñüð Ú ÐÒ Ô Ú ÐÑ Ñ Ø Þ Ú ÐÒ ÓÐÒ ÔÙØ Ò Ó Ø Þ Ú ÐÒ Ñ Ø Þ ÓÐÒ ÔÙØ Ò Ó Ø Þ ÙÒØ ÓÒÑ ÜÐ µñüð Ú ÐÒ Ú ÐÑ Ô Ú ÐÞ Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò ººº Ú ÐÑ Ü Ò Ú Ð Ø µ ÙÒ Ø ÙÒØ ÓÒÑ ÜÐ Ú ÐÑÜÐ Ò Ù FP-5-hknyk-15 FP-5-hknyk-16

Ñ ÜÐ ØÖ Ò Å Ü Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò Ó Ø Þ Ð ÖÁÒ ÑÜÐ ØÖ ØÖÙ Második példa a Poly/ML debugger használatára (folyt.) Ú ÐÑ Ü Ò Ñ ÜÐ ÒØ Ö Ú ÐÞ Ô Ñ Ø Þ ÓÐÒ ÔÙØ Ò ººº Nyomkövetés Ñ ÜÐ µñüð ÒØ Ö Ú ÐÒ Ú ÐÑ Ô Ú ÐÒ Ñ Ø Þ ÓÐÒ ÔÙØ Ò Ó Ø Þ ØÖ Ò Å Ü ÒØ Ö Ú ÐØ Ô Ú Ð Ñ ÜÐ µñüð ÒØ Ö Ú ÐÒ Ô ØÖ Ò Å ÜÖ ØÙÖÒ Ô Ú ÐÑ Ñ Ø Þ Ú ÐÒ ÓÐÒ ÔÙØ Ò Ó Ø Þ FP-5-hknyk-17 ØÖ Ò Å Ü ÒØ Ö Ú ÐØ Ñ Ø Þ Ú Ð Ô Deklaratív ØÖ Ò Å ÜÖ ØÙÖÒ Ô programozás. BME VIK, 2006. tavaszi félév Ñ ÜÐ µñüð ÒØ Ö FP-5-hknyk-18 Második Ú ÐÒ Ô Ú ÐÑ ÓÐÒ ÔÙØ Ò példa a Poly/ML debugger használatára (folyt.) Ú ÐÒ Ó Ø Þ ØÖ Ò Å Ü ÒØ Ö Ú ÐØ ÓÐÒ ÔÙØ Ò Ú Ð Ô Ñ ÜÐ µñüð ÒØ Ö Ú ÐÒ Ô Ú ÐÑ Ó Ø Þ Ú ÐÒ ØÖ Ò Å ÜÖ ØÙÖÒ Ô ØÖ Ò Å Ü ÒØ Ö Ú ÐØ Ó Ø Þ Ú Ð Ô Ú Ð Ø ËÇÅ Ô ØÖ Ò ÓÔØ ÓÒ Ñ ÜÐÖ ØÙÖÒ ËÇÅ Ô Ñ ÜÐ µñüðö ØÙÖÒ ËÇÅ Ô