仍在学习 SICStus Prolog 4 FFI 到 C 的技巧,我对https://sicstus.sics.se/sicstus/docs/latest4/html/sicstus.html/中的示例谓词 c1/2 有一个具体问题Foreign-Code-Examples.html#Foreign-Code-Examples。
ex.pl 包括以下行:
foreign(c1, c, c1(+integer, [-integer])).
ex.c 包括以下代码段:
/* c1(+integer, [-integer]) */
SP_integer c1(a)
SP_integer a;
{
return(a+9);
}
这适用于小整数:
| ?- c1(100,X).
X = 109 ?
yes
| ?- c1(100000000000000,X).
X = 100000000000009 ?
yes
它不适用于大整数:
| ?- c1(10000000000000000000000000,X).
X = 1590897978359414793 ?
yes
如何正确(有效地)处理小整数和大整数?IIRC 大整数不能作为“SP_integers”传递,所以我应该将这些值作为术语(“SP_term_ref”)传递并进行适当的动态类型检查(可能随后进行数据提取)?请帮忙!