dram.me

CLIPS-Tcl中接口返回值设计

补遗

  1. 可以对NULL做特殊处理,将NULL转化成符号nil,这样有个好处,在传入其他函数时,会作为类型不匹配而报错,可以避免内存错误,详见这个提交。—— 2017-10-21

由于发现与布尔值相关接口(例如Tcl_GetBoolean),之前将布尔值作为CLIPS-Tcl状态返回值的机制不再试用,做了重新调整

由于CLIPS不支持多值返回,也不能像C语言一样指针传入,所以在对接这类接口时遇到困难。

当前是采用类似/ok//error//0//-1/这样的符号类型表示,借助与类型将异常状态返回值与函数主返回值区分开。这样处理有几点好处:

  1. 和布尔类型区分开;

  2. 可以方便地在代码中包含数值型符号(如果直接在代码中使用数字,例如1-1,CLIPS会作为数值处理);

  3. 返回值类型相对简化(之前的机制,如果和数值型状态值同时使用,例如Tcl_EvalEx相关接口,返回值就存在两种类型)。

借鉴CLIPS中对TRUEFLASE的处理,可以对以上提及的标记符号优化处理,具体见提交的代码。

另外还有考虑郭是否可以实现类似Tcl的模式,传入变量名,函数内部基于该名称创建变量的值。但这应该会导致CLIPS语义检查的混乱。