Как сгенерировать файл, прочитав его имя в SWI-Prolog?

Я пишу программу swi-prolog, которая читает имя файла, открывает его и пишет что-то еще.

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

Это работает, но я должен указать имя файла как "name". "Type" ", например:

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

Мне нужна программа, чтобы получить имя таким образом, без единой кавычки:

?- main.
|: Hello.
true.

И тип файла должен быть поставлен мной:

$ ls
Hello.«whatever»

Есть идеи? Спасибо

1 ответ

Учитывая, что вы используете 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 сказуемое.

Другие вопросы по тегам