更快速地测试您的prolog程序

chu*_*tsu 4 testing prolog

我是Prolog的新手,从终端启动prolog解释器的任务,输入consult('some_prolog_program.pl'),然后测试你刚写的谓词是非常耗时的,有没有办法运行脚本测试加快发展?

例如,在CI中可以写一个main我将使用我定义的函数,然后我可以执行:

make && ./a.out

为了测试代码,我可以用Prolog做类似的事情吗?

Tha*_*dis 6

  1. 您可以始终打开解释器,然后重新编译该文件.

  2. 您可以在编译文件后自动运行谓词:

    :- foo(4,2).
    
    Run Code Online (Sandbox Code Playgroud)

    这将foo(4,2)在文件中遇到该行时运行.

  3. 在启动(大多数)Prolog解释器时可以使用标志,这些解释器允许您编译文件并运行谓词(查看手册页).这样你就可以制作一个Bash脚本.以下将使用SWI-Prolog 进行咨询file.pl和运行foo/0:

    #!/bin/sh
    exec swipl -q  -f none -g "load_files([file],[silent(true)])" \
               -t foo -- $*
    
    Run Code Online (Sandbox Code Playgroud)

    此谓词将使用您在命令行中提供的标志列表统一Arguments:

    current_prolog_flag(argv, Arguments)
    
    Run Code Online (Sandbox Code Playgroud)

    但除非您要进行大量测试,否则我认为编写所有这些额外代码的速度会更快.

我个人非常喜欢在有或没有跟踪的情况下随时测试任何谓词的灵活性(请参阅参考资料trace/0),而无需编写额外的代码来调用它们(与C不同).

关于在不离开解释器的情况下重新加载文件的PS:如果您使用了动态谓词或全局变量,则可能会遇到一些问题; 你将不得不做一些清洁工作.