相关疑难解决方法(0)

用FPC编写Scheme解释器:递归数据结构

本质上,这是关于Pascal(FPC)中的递归数据结构的问题.正如我想在SICP第4章中所示实现一个Scheme解释器,这个问题也可能与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: …
Run Code Online (Sandbox Code Playgroud)

delphi scheme pascal freepascal sicp

3
推荐指数
1
解决办法
372
查看次数

标签 统计

delphi ×1

freepascal ×1

pascal ×1

scheme ×1

sicp ×1