将整数列表从java传递到frege函数的最简单方法是什么?
假设我有一个弗雷格模将整数列表从java传递到frege函数的最简单方法是什么?,java,list,interop,frege,Java,List,Interop,Frege,假设我有一个弗雷格模 module Util where total :: [Int] -> Int total xs = fold (+) 0 xs 如果“total”是用Java编写的,我可以通过 Util.total(Arrays.asList(1,2,3)); 从Java调用Frege实现的最佳方法是什么?您可以使用一个好的旧int[]数组,相应的Frege类型将是JArray int。因为数组可以从Java和Frege中的列表中生成,也可以放入列表中,所以它们适合此类任务
module Util where
total :: [Int] -> Int
total xs = fold (+) 0 xs
如果“total”是用Java编写的,我可以通过
Util.total(Arrays.asList(1,2,3));
从Java调用Frege实现的最佳方法是什么?您可以使用一个好的旧int[]数组,相应的Frege类型将是JArray int。因为数组可以从Java和Frege中的列表中生成,也可以放入列表中,所以它们适合此类任务 请使用repl了解如何将数组转换为列表,以便将其传递给函数 如果存在rgd方面的问题。堆空间中,Data.Iterators中还有一个所谓的ArrayIterator,它是ListView类型类的实例。因此,另一个选择是编写您的frege以便获取列表视图
total xs = fold (+) 0 xs.toList
在java中,调用
ArrayIterator.from (... code to create array here ...)
如果您不能更改弗雷格代码,或者不想更改,您可以使用
(ArrayIterator.from (... code to create array here ...)).toList
最后但并非最不重要的一点是,您可以使用
foldArray
折叠数组而无需进行转换。我正在使用Sean Corfield的Leiningen插件编译Frege代码,并能够从Clojure调用Frege代码。但是,当我试图调用一个需要整数列表的Frege函数时(比如使用(X/foo[1,2,3])
),我得到一个错误ClassCastException clojure.lang.PersistentVector不能转换为Frege.runtime.Lazy
@Ingo,上面的答案也可以用在这里吗?@0dB嗯,信息很清楚。我可以这样说:clojure列表不是frege列表。不过,上面的答案有点过时。如果您能够生成java.util.List,我们可能会找到一种方法将该数据输入到Frege中。不过,提出一个新问题会很好。