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