This chapter describes I/O of Egison. Since Egison is purely functional, Egison I/O has its own special syntax.



Hello World!

First of all, let's greet the world using Egison. The following is a "Hello world" program in Egison.

We can execute the above program as follow.

% egison hello.egi
Hello, World!
% 

Egison I/O works via a function named main. In main, we can use I/O functions such as write, which we cannot use in the others. (The list of I/O primitive functions is given in the next chapter Primitive Functions.)

The Command Line Arguments

The collection of them is given for main as its argument.

If you run the interpreter with a filename as its first argument, the interpreter executes the function main. Like the above case, the arguments other than the filename hand main.

For instance, assume we create args.egi.

Then, executing the following commands, you can find the arguments are given for main as $args.

$ egison args.egi
{}
$ egison args.egi We can write scripts in Egison
{"We" "can" "write" "scripts" "in" "Egison"}

do Expressions

(do {statement ...} expr)
  
  statement ::= expr
              | [variable expr]

To do more complicated I/O tasks, we can use do expressions, which is similar to the let and letrec expressions. The feature of the do expressions is serial execution. If you know Haskell, you probably notice that it is the same with the do expressions in Haskell. Recall many I/O functions have no return values. In such cases, we can omit to write a variable.

Then, execute it as follow.

$ egison repl.egi
input: Hi
Hi
input: Hello
Hello
input: Repl
Repl
input: ^C
$ 

When the code is executed, (write "args: "), (read-line) and (write input) are executed in the order.

There are several samples in the directory sample/io/. Please check them.

io Expressions

We can use an io expression to call an IO function as an ordinary function. The following is a definition of the pure-rand function in lib/core/io.egi.

We can use an io expression on the interpreter, too.

$ egison
Egison Version 3.3.15 (C) 2011-2014 Satoshi Egi
http://www.egison.org
Welcome to Egison Interpreter!
> (io (each (compose show print) (match-all primes (list integer) [<join _ <cons $p <cons ,(+ p 2) <cons ,(+ p 6) <cons ,(+ p 8) _>>>>> [p (+ p 2) (+ p 6) (+ p 8)]])))
[5 7 11 13]
[11 13 17 19]
[101 103 107 109]
[191 193 197 199]
[821 823 827 829]
[1481 1483 1487 1489]
[1871 1873 1877 1879]
[2081 2083 2087 2089]
[3251 3253 3257 3259]
[3461 3463 3467 3469]
[5651 5653 5657 5659]
^C
>

What to do next...

Next Chapter: Primitive Functions Top of Manual Back to Home