大多数与Agda的交互都是通过EMACS完成的,但是有没有办法以编程方式进行呢?即,是否可以通过命令行或某些API进行所有操作?主要目标是构建一个薄包装器,以便我们可以使用另一种语言来调用Agda,例如:
claims
我之前曾问过如何使用Agda as a library,但显然只涉及Haskell。我尝试查看Agda的VIM扩展以了解其工作方式,似乎它正在向Agda发送命令,但我不确定具体如何。指向相关文档的指针将不胜感激!
答案 0 :(得分:4)
据我所知,当前(在master分支上)有两种从命令行与Agda进行交互的方式:
agda --interaction
的原始后端agda --interaction-json
如您所见,此后端专为Emacs设计。 需要进行一些逆向工程才能弄清楚他们彼此之间在说什么。
在实现some notes时,我已经就Emacs协议做了agda-mode on Atom了。但恐怕它在撰写本文时已偏离了实际的实现。
如果您想与Emacs后端进行交互,以下是Agda源代码中的一些相关部分,您可能会发现它们有用:
不用说,使用Emacs协议会很痛苦。
因此,我设法在新的后端中用JSON替换了Emacs Lisp。
现在,您将不必处理Emacs Lisp的S表达式。 responses are encoded as JSON
就是这样但是,有效负载仍然被序列化为字符串,因此很难从Agda中提取有用的信息。因此,我仍在研究the json
branch,尝试在JSON中encode the payload。