我编写了以下方案函数,在 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 ))
在 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();
}