Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将整数列表从java传递到frege函数的最简单方法是什么?_Java_List_Interop_Frege - Fatal编程技术网

将整数列表从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中。不过,提出一个新问题会很好。