Command line argument vectors in Prolog?
它们存在吗?我编写了一个解决数独难题的程序,它需要3个步骤才能运行。
1 2 3
| > prolog
> consult(sudoku ).
> solve (puzzle ). |
我正在寻找一种类似
的方法
并完成它。有没有办法在Prolog中做到这一点?还是我必须用C或其他语言编写一些帮助程序才能使用,例如
任何帮助将不胜感激。还是Prolog的新手,很难找到好的文档。
这取决于您使用的Prolog系统。大多数Prolog系统都有命令行
从这里可以提供初始的Prolog文本供您参考,然后
最初要运行的Prolog目标。
这里有一些例子,我结合了咨询并遇到了一个共同的目标:
SWI-Prolog:
1
| > swipl -t ['sudoku.p'],puzzle |
GNUprolog:
1
| > gprolog --entry -goal ['sudoku.p'],puzzle ,halt |
Jekejekeprolog:
1
| > java -jar interpreter.jar -t ['sudoku.p'],puzzle |
致谢
- 谢谢!可能是有史以来最好的答案。大声笑我喜欢您的项目名称Jekejeke。
-
嘿,我正在使用siwpl,而swipl -t ['sudoku.p']获取它来编译模块,但是puzzle抛出错误,因为它没有获取它的参数,该参数应该是文件名。尝试了其他一些事情,例如...,solve(puzzle)和...,solve[puzzle]。无法解决。如果没有很好的方法将args传递给命令行中的函数,这没什么大不了的,但是如果有的话,那将是很甜蜜的。
-
问题可能是咨询。扩展名可能不是.p而是.pl。或者,您需要提供更长的路径,并注意平台特定的路径分隔符。然后,您可以一次性使用[\\'path / soduku.pl \\'],solve(puzzle),而无需空格。因为连词将不再被视为一个命令行参数,所以空格将不起作用。
使用-g标志,可以使Prolog在进入顶层之前执行您选择的目标。默认是一个谓词,它会打印欢迎消息。此外,您可能希望使用-t标志来将默认目标prolog / 0替换为您选择的目标之一,作为交互式顶层。
另请参见手册。