2015-06-21 40 views
1

我在Prolog中工作,并试图从文件读入。第一行是密码。有了密码,我希望能够使用特殊字符。从文件中读取prolog在特殊字符上抛出错误

这里是读文件代码:

readfile(Filename):- 
    open(Filename, read, Str), 
    read(Str, Thepassword), 
    read(Str, Thefirewall), 
    close(Str), 
    nb_setval(password, Thepassword), 
    nb_setval(firewall, Thefirewall). 

,直到我从布列塔尼更改密码,以布丽塔是本机工作正常,然后我得到ERROR: computer1.txt:1: Syntax error: Operator expected

任何人都知道我应该怎么办呢?

+0

'read'不会读取字符串,而是序言条款。 – dlask

+0

正如@dlask所说,“read/2”读取Prolog条款(请参阅[文档](http://www.swi-prolog.org/pldoc/man?predicate=read/2))。你需要显示你的输入文件的实际外观。你曾经工作过的是恰当的Prolog术语。但是不再在引入'!'符号时。 – lurker

+0

像你这样使用'nb_setval/2'显然是滥用。某些Prolog系统太容易提供这种功能是相当可悲的。 – false

回答

2

read/2读取序言条款。你可能想要的是阅读整个行,不管它是否在Prolog语法中。

在SWI Prolog中,您可以使用谓词read_line_to_codes/2来代替。 (见SWI manual entry)。您必须首先包含use_module(library(readutil))的图书馆。

SICStus有一个类似的谓词read_line/1/2

如果您需要原子而不是代码列表,您可以使用atom_codes/2进行转换。