Написание интерпретатора Scheme с FPC: рекурсивные структуры данных

По сути, это вопрос о рекурсивных структурах данных в Pascal (FPC). Поскольку я хотел бы реализовать интерпретатор Scheme, как это показано в главе 4 SICP, этот вопрос может быть актуален и для Schemers. :)

S-выражения должны быть представлены как помеченные данные. До сих пор я построил вариантную запись, которая представляет числа и пары. Надеемся, что код читабелен и не требует пояснений:

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.

Тем не менее, компиляция кода выдает ошибку следующим образом:

$ 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

Очевидно, что в функции есть ошибкаMakePair, Но я пока не понимаю, что именно я делаю не так. Любая помощь приветствуется. :)

Ответы на вопрос(2)

Ваш ответ на вопрос