Hello World (Hume)
This example shows the well-known "Hello World!" example implemented
From LiteratePrograms
- Other implementations: Ada | ALGOL 68 | Alice ML | Amiga E | Applescript | AspectJ | Assembly Intel x86 Linux | Assembly Intel x86 NetBSD | AWK | bash | BASIC | Batch files | C | C, Cairo | C, Xlib | Candle | Clojure | C++ | C# | Delphi | Dylan | E | Eiffel | Erlang | Forth | FORTRAN | Fortress | Go about Hello World (Go) | Groovy | Haskell | Hume | IBM PC bootstrap | Inform 7 | Java | Java, Swing | JavaScript | LaTeX | Lisp | Logo | Lua | Maple | MATLAB | Mercury | OCaml/F Sharp | occam | Oz | Pascal | Perl | PHP | Pic | PIR | PLI | PostScript | Prolog | Python | Rexx | Ruby | Scala | Scheme | Seed7 | sh | Smalltalk | SQL | Standard ML | SVG | Tcl | Tcl Tk | Visual Basic | Visual Basic .NET | XSL
This example shows the well-known "Hello World!" example implemented in Hume as output of a counter automaton.
Lets specify output
<<I/O bindings>>=
-- I/O bindings
stream output to "std_out" ;
Define automaton (box in Hume) inputs, outputs and body. This is the main program loop. Each box runs in a separate thread.
<<box definitions>>=
-- box definition
box hello
in (count_in::int 32) -- inputs
out (count_out::int 32, shown::(string, int 32, char)) -- outputs (result roles and types)
-- body
match -- match patterns structure must conform to inputs
-- corresponding expressions must conform to the declared 'out' type
-- declaration role names are in sole interest of wiring statements
99 -> (0, ("Hello World ", 99,'\n')) -- reset count_out to 0
| count -> (count +1, ("Hello World ", count,'\n')) ;
Wire box (thread) outputs and inputs generating mailboxes
<<wirings>>=
wire hello
-- inputs wiring for "in" parameters
(hello.count_out initially 0) -- get hello.count_in from hello.count_out
-- outputs wiring for "out" result tuple
(hello.count_in, output) ; -- put hello.count_out to hello.count_in, hello.shown to output
The whole program
<<HelloWorld.hume>>= -- HelloWorld.hume I/O bindings box definitions wirings
Execute with the Hume interpreter
./hume HelloWorld.hume
and the output is
Hello World 0 Hello World 1 Hello World 2 ...
Alternatively the construct expression is equivalent to a box with no inputs, and one output to std_out
The program does not end until you type Ctrl+C.
<<HelloWorld2.hume>>=
-- HelloWorld2.hume
expression "Hello World\n" ;
| Download code |