2012-04-28 89 views
3

它们存在吗?我写了一个解决数独谜题的程序,它需要3个步骤才能运行。Prolog中的命令行参数向量?

> prolog 
> consult(sudoku). 
> solve(puzzle). 

我正在寻找一种方法来像做

> prolog puzzle 

,并用它做。有没有办法在Prolog中执行此操作?或者我将不得不写一些帮助程序在C或其他语言使用像

> ./solve puzzle 

任何帮助,将不胜感激。对于Prolog来说还是新手,并且无法找到好的文档。

回答

3

这取决于您正在使用的Prolog系统。大多数Prolog系统都有一个命令行 开始,其中可以提供一个初始的Prolog文本供参考,并提供一个初始的Prolog目标。

这里有一些例子,我已经联合了磋商,并运行到一个连接性目标:

SWI-Prolog

> swipl -t ['sudoku.p'],puzzle 

GNU Prolog

> gprolog --entry-goal ['sudoku.p'],puzzle,halt 

Jekejeke Prolog

> java -jar interpreter.jar -t ['sudoku.p'],puzzle 

最好的问候

+0

谢谢!可能是有史以来最好的答案。哈哈,我喜欢你的项目名称Jekejeke。 – 2012-04-29 04:36:40

+0

嘿,我正在使用siwpl,'swipl -t ['sudoku.p']'得到它来编译模块,但'puzzle'会抛出一个错误,因为它没有得到它的参数,这应该是一个文件名。尝试了其他一些东西,如......,解决(谜题)和......,解决[谜题]。无法实现。如果没有一种很好的方法可以将命令传递给命令行中的函数,但是如果存在的话,那将是更好的选择。 – 2012-04-29 04:42:13

+0

问题可能是咨询。也许扩展名不是.p,而是.pl。或者您需要提供更长的路径,并注意平台特定的路径分隔符。然后你可以使用['path/soduku.pl'],解决(拼图)所有在一个没有空格。由于连接不再被识别为一个命令行参数,所以空格不起作用。 – 2012-04-29 09:28:07

2

使用-g标志,您可以在进入最高级别之前让Prolog执行您选择的目标。默认是打印欢迎消息的谓词。此外,您可能希望使用-t标志作为交互式顶级选项替换默认目标序言/ 0。请参阅the manual