# Using 'tell' with multiple files

**URL:** <https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747>\
**Category:** Help!\
**Created:** [September 6, 2022, 11:20pm UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747 "2022-09-06T23:20:19Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![rmodesi](https://avatars.discourse-cdn.com/v4/letter/r/a5b964/32.png) [@rmodesi](https://swi-prolog.discourse.group/u/rmodesi)\
**Post date:** [September 6, 2022, 11:20pm UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747/1 "2022-09-06T23:20:19Z")

</div>

I’m using: SWI-Prolog version 7.6.4, 64 bit, threaded

I want the code to:  
Open two files (AAA and BBB) and write to them sequentially.

But what I’m getting is:  
File BBB is not created

My code looks like this:

```prolog
go :- tell('aaa'),
    write('First line of AAA'),nl,
    tell('bbb'),
    write('First line of BBB'),nl,
    tell(user),
    write('This goes on the screen'),nl,
    tell('aaa'),
    write('Second line of AAA'),nl,
    told.

```

This code is an example from Michael A Covington’s Prolog Programming in Depth with copyright date 1997. I assume that this functionality is not available in SWI-Prolog but can’t seem to find the answer by searching the web. I am a newbie to Prolog.

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [September 7, 2022, 12:39am UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747/2 "2022-09-07T00:39:10Z")

</div>

Hmmm … looks like a bug.

You can do what you want the more modern way:

```prolog
    open(aaa, write, AAA),
    open(bbb, write, BBB),
    format(AAA, 'First line of AAA~n', []),
    format(BBB, 'First line of BBB~n', []),
    format(user, 'This goes on the screen~n', []),
    format(AAA, 'Second line of AAA~n', []),
    close(AAA),
    close(BBB).

```

Also, `write('...'), nl` can be written more compactly as `writeln('...')`.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [September 7, 2022, 7:47am UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747/3 "2022-09-07T07:47:29Z")

</div>

> [@peter.ludemann](#):
>
> Hmmm … looks like a bug.

No bug 🙂 The stream associated with `bbb` is never flushed. After quitting Prolog it flushes and closes all streams and `bbb` is filled. You could add a `told/0` call after writing to `bbb`.

But, as @peter.ludemann says, tell/1 and friends are old pre-standard predicates. I’ve tried removing them when adding support for ISO open/3 and friends, but go so many complains that I re-added them ☹

---

<div class="post-metadata">

**Author:** ![rmodesi](https://avatars.discourse-cdn.com/v4/letter/r/a5b964/32.png) [@rmodesi](https://swi-prolog.discourse.group/u/rmodesi)\
**Post date:** [September 8, 2022, 8:54pm UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747/4 "2022-09-08T20:54:13Z")

</div>

Peter, Jan,  
Thank you for your help. As a Prolog newbie it’s really nice for two such eminent people to respond to my questions. I’ll do some research to learn the more modern methods of writing to files.

Ron

---

<div class="post-metadata">

**Author:** ![mgondan1](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/mgondan1/32/803_2.png) [@mgondan1](https://swi-prolog.discourse.group/u/mgondan1)\
**Post date:** [September 9, 2022, 6:35am UTC](https://swi-prolog.discourse.group/t/using-tell-with-multiple-files/5747/5 "2022-09-09T06:35:04Z")

</div>

The heart is for having them added again 😊
