我想了解 Frege List 的工作原理以及如何从 Java 中使用它。当我下载 Frege 编译器代码时,我发现很难从 Frege 代码中理解 Frege 列表是什么。
做一些测试,我发现 Frege List 是TList
Java 中类的一个实例,它有一个特殊的方法,称为_Cons()
,它返回一个DCons
对象。DCons
正如预期的那样,是一对,其中该对的第一个元素对应于列表的头部,而第二个元素是尾部,因此是另一个TList
. 在_Cons()
空列表上调用时,返回值为 null。因此,要在 Frege 上实现一个 Java 迭代器TList
,可以这样写:
public class TListIterator implements Iterator<Object> {
DCons elem;
public TListIterator(TList list) {
this.elem = list._Cons();
}
@Override
public boolean hasNext() {
return this.elem != null;
}
@Override
public Object next() {
final Object head = Delayed.<Object>forced( this.elem.mem1 );
this.elem = this.elem.mem2.<TList>forced()._Cons();
return head;
}
@Override
public void remove() {
throw new RuntimeException( "Remove is not implemented" );
}
}
我的问题是:
- 我的解释
TList
正确吗? - 是否
TListIterator
正确? - 我在哪里可以找到更多关于什么
TList
和在 Frege 编译器源代码中的DList
信息?DCons
他们有记录吗? - 关于 Frege 最佳实践的一个更通用的问题:当您希望 Java 代码使用 Frege 值时,从 Frege 代码返回 Java“标准”对象更好还是直接使用 Java 中的 Frege 类更好?我的观点是前者比后者更容易编写,但转换开销很小。例如,
TListIterator
总是可以通过将Frege转换TList
为 Java来避免 a。LinkedList