Ein rekursiver Ansatz kann nur für sehr kurze Listen funktionieren, da es bei längeren zum Stacküberlauf kommmt. Der Ansatz ist also schlichtweg falsch.
Also Iterativ. Da das Ergebnis der Funktion eh gesetzt werden muss und in den meisten Fällen "0" ist, sollte Result so vorinitialisiert werden. Dann wird durchgegangen bis der Wert gefunden wurde (Break) oder das nächste Element "NIL" ist (Ende erreicht).
Zu deinem Fehler: Wenn man das Ergebnis einer Funktion nicht auswertet geht es verloren.
Delphi-Quelltext
Zwecks besserer Übersichtlichkeit solltest Du MyList zu TMyListItem o.ä. umbenennen, schliesslich ist es selber keine Liste sondern halt nur ein Element daraus.
Grüsse, Dirk