使用kawa从Java调用scheme函数,但是返回的列表的一半被省略并被三个点替换(...)

时间:2013-05-17 18:53:28

标签: scheme kawa

我编写了以下方案函数,它在Dr Racket中调用时按预期工作,但在使用kawa调用时只返回结果的一半。

(define getYValues (lambda (f base lst)
              (if (null? lst) 
              base
              (cons (f (car lst)) (getYValues f base (cdr lst)))
              )
      )
)

用于测试的值是:

(getYValues 
(lambda (x)
    (* x x)
    )
 '() 
'(-5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 ))

在Dr Racket中,它返回正确的结果: (25.0 20.25 16.0 12.25 9.0 6.25 4.0 2.25 1.0 0.25 0.0 0.25 1.0 2.25 4.0 6.25 9.0 12.25 16.0 20.25)

但是使用kawa从我们的Java应用程序调用它返回: (25.0 20.25 16.0 12.25 9.0 6.25 4.0 2.25 1.0 0.25 ......)

有谁知道为什么列表被截断,其中一半被......取代?

我使用Scheme.eval来调用函数

更新/溶液

以下代码解决了我的问题:

LList list = new LList();
try {
    list = (LList)scm.eval(schemeCall);
} catch (Throwable e) {
    e.printStackTrace();
}
double[] yValues = new double[LList.length(list)];
for (int i = 0; i<yValues.length;i++) {
    yValues[i] = ((DFloNum) list.get(i)).doubleValue();
}

1 个答案:

答案 0 :(得分:1)

狂野猜测:列表可能已完成,但仅显示其中的一部分,以用于演示目的 - 其余部分假定在...部分。要检查,打印列表的length,即使未显示所有元素,也必须正确。