Escribiendo un intérprete de esquema con FPC: estructuras de datos recursivas

Esencialmente, esta es una pregunta sobre las estructuras de datos recursivos en Pascal (FPC). Como me gustaría implementar un intérprete de Scheme como se muestra en el capítulo 4 del SICP, esta pregunta también puede ser relevante para los Schemers. :)

Las expresiones S se representarán como datos etiquetados. Hasta ahora, he construido un registro de variante, que representa números y pares. Esperemos que el código sea legible y autoexplicativo:

program scheme;

type
   TTag = (ScmFixnum, ScmPair);
   PScmObject = ^TScmObject;
   TScmObject = record
      case ScmObjectTag: TTag of
         ScmFixnum: (ScmObjectFixnum: integer);
         ScmPair: (ScmObjectCar, ScmObjectCdr: PScmObject);
      end;

var
   Test1: TScmObject;
   Test2: TScmObject;
   Test3: TScmObject;

function MakeFixnum(x: integer): TScmObject;
var
   fixnum: TScmObject;
begin
   fixnum.ScmObjectTag := ScmFixnum;
   fixnum.ScmObjectFixnum := x;
   MakeFixnum := fixnum;
end;

function MakePair(car, cdr: PScmObject): TScmObject;
var
   pair: TScmObject;
begin
   pair.ScmObjectTag := ScmPair;
   pair.ScmObjectCar := car;
   pair.ScmObjectCdr := cdr;
   MakePair := pair;
end;

begin
   Test1 := MakeFixnum(7);
   writeln('Test1, Tag: ', Test1.ScmObjectTag,
           ', Content: ', Test1.ScmObjectFixnum);
   Test2 := MakeFixnum(9);
   writeln('Test2, Tag: ', Test2.ScmObjectTag,
           ', Content: ', Test2.ScmObjectFixnum);
   Test3 := MakePair(Test1, Test2);
end.

Sin embargo, compilar el código produce un error de la siguiente manera:

$ fpc scheme.pas
(...)
Compiling scheme.pas
scheme.pas(43,34) Error: Incompatible type for arg no. 2: Got "TScmObject", expected "PScmObject"
scheme.pas(45) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted

Es obvio que hay un error en la función.MakePair. Pero aún no entiendo qué es exactamente lo que estoy haciendo mal. Cualquier ayuda es apreciada. :)

Respuestas a la pregunta(2)

Su respuesta a la pregunta