在 Rascal 中使用外语 API?

Using foreign language APIs in Rascal?

有没有办法在 Rascal 中调用外语 API?特别是,我一直在考虑 Stanford Core NLP 有 Java API.

Rascal 有出色的JavaAPI。从本质上讲,外部函数被定义为一个普通的 Rascal 函数,前缀为关键字 java 和一个属性 javaClass,该属性定义 class 实现该函数的位置。

List上的size函数为例。在 Rascal 的 List 模块中 size 定义如下:

@javaClass{org.rascalmpl.library.Prelude}
public java int size(list[&T] lst);

在javaclassorg.rascalmpl.library.Prelude中,方法size是这样实现的:

public IValue size(IList lst)
{
   return values.integer(lst.length());
}

请注意,所有 Rascal 值都是作为(不可变的)IValues 实现的,并且某些封送处理是不可避免的。

最后说明:与 NLP 库交互非常有趣(实际上在我们的遗愿清单上),但要注意保留 Rascal 的不可变数据和主要功能解决方案的精神。在为此类库设计 Rascal API 时必须考虑到这一点。