java - 将整数列表从 java 传递到 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 中都可以从列表中创建数组,也可以将数组创建为列表,因此它们非常适合此类任务。

请使用 repl 了解如何将数组转换为列表,以便将其传递给函数。

如果有疑问 rgd。堆空间中,Data.Iterators 中还有一个所谓的 ArrayIterator,即 ListView 类型类的实例。因此,另一种选择是编写您的 frege 以便获取 ListView

total xs = fold (+) 0 xs.toList

在java中调用相当于

ArrayIterator.from (... code to create array here ...)

如果您无法更改 frege 代码,或者不想更改,您可以使用以下命令创建一个惰性列表

(ArrayIterator.from (... code to create array here ...)).toList

最后但并非最不重要的一点是,您可以折叠数组,而无需先使用 foldArray 进行转换。

关于java - 将整数列表从 java 传递到 frege 函数的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349444/

相关文章:

java - 如何在右侧标签中设置文本?

java - 在 Java 中对 Shift-JIS 字符使用 XOR

java - 为什么 JavaFX TableView#setItems 采用 ObservableList<T> 而不是 ObservableList<?扩展 T>?

python - 在python中从字符串中的其他字符中拆分数字

c - 将节点附加到指针数组

c# - 如何从 native C .dll 导出结构定义以在 C# 中使用

java - 生产环境下ActiveMQ的队列满了怎么办?

java - 编织外部 jar 中的 Aspectj

.net - 发布 Excel Interop com 对象的最佳方式

c# - 从 C# (VS2013) 调用 C++ 函数时隐藏的调试信息