File 如何通过在SWI Prolog中读取文件名来生成文件?

File 如何通过在SWI Prolog中读取文件名来生成文件?,file,swi-prolog,tell,File,Swi Prolog,Tell,我正在编写一个swi prolog程序,它读取一个文件名,打开它,然后写一些东西 main :- read(FileName), tell(FileName), write("Some stuff"), told. 它可以工作,但我必须将文件名设置为“«名称».«类型»”,如下所示: ?- main. |: 'Hello.txt'. true. 我需要程序以这种方式接收名称,而不需要单个cuotes: ?- main. |: Hello. tr

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

main :- read(FileName),
        tell(FileName),
        write("Some stuff"),
        told.
它可以工作,但我必须将文件名设置为“«名称».«类型»”,如下所示:

?- main.
|: 'Hello.txt'.
true.
我需要程序以这种方式接收名称,而不需要单个cuotes:

?- main.
|: Hello.
true.
文件的类型必须由我输入:

$ ls
Hello.«whatever»
有什么想法吗?
谢谢

鉴于您正在使用SWI Prolog,您可以使用
readutil:read\u line\u to\u 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'.
?-使用_模块(库(readutil))。
符合事实的
?-当前输入(流)、读取行到代码(流、文件名代码)、原子代码(文件名、文件名代码)。
|:Foo
流=(0x10516c440),
FileNameCodes=[70111111],
文件名='Foo'。
如果还需要在读取的文件名中添加文件扩展名,请使用标准的
atom\u concat/3
谓词