有没有办法在Rascal中调用外语API?特别是,我一直在考虑具有Java API的Stanford Core NLP。
Rascal拥有出色的Java API。本质上,外部函数被定义为以关键字java
为前缀的普通Rascal函数和定义实现函数的类的属性javaClass
。
以size
s上的List
函数为例。在Rascal的List
模块中,size
定义如下:
@javaClass{org.rascalmpl.library.Prelude}
public java int size(list[&T] lst);
在java类org.rascalmpl.library.Prelude
中,方法size
实现如下:
public IValue size(IList lst)
{
return values.integer(lst.length());
}
请注意,所有Rascal值都实现为(不可变)IValue
s,并且某些封送是不可避免的。
最后的注意事项:与NLP库的接口非常有趣(并且实际上在我们的列表中),但要注意保留Rascal的不可变数据精神和主要功能解决方案。在为这样的库设计Rascal API时必须考虑到这一点。