0

我正在编写一个 swi-prolog 程序,它读取文件名,打开它,然后写一些东西。

main :- read(FileName),
        tell(FileName),
        write("Some stuff"),
        told.

它可以工作,但我必须将文件名作为“«名称»。«类型»”,如下所示:

?- main.
|: 'Hello.txt'.
true.

我需要程序以这种方式接收名称,而不需要单引号:

?- main.
|: Hello.
true.

文件的类型必须由我输入:

$ ls
Hello.«whatever»

有任何想法吗?谢谢

4

1 回答 1

0

鉴于您使用的是 SWI-Prolog,您可以使用readutil:read_line_to_codes/2库谓词:

?- use_module(library(readutil)).
true.

?- current_input(Stream), read_line_to_codes(Stream, FileNameCodes), atom_codes(FileName, FileNameCodes).
|: Foo
Stream = <stream>(0x10516c440),
FileNameCodes = [70, 111, 111],
FileName = 'Foo'.

如果您还需要为您读取的文件名添加文件扩展名,请使用标准atom_concat/3谓词。

于 2015-10-01T14:12:35.983 回答