aboutsummaryrefslogtreecommitdiff
path: root/examples/hello.halk
blob: 06a3d95705d0a206e2ff4563a9259bf770c70d61 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[comments in square brackets]

[preprocessor directives]
#INCLUDE 'math.halk';                                    [looks for a 'math.halk' file in the cwd, then ~/halk/include]
#INCLUDE 'io' AS '';                                     [bring everything in 'io' into global scope]


let.hello -> 'hello, ';                                  [variables must be given a value at declaration]

let.PI => math:PI;                                       [namespaces are accessed with a ':'']
                                                         [constants are denoted with a '=>']

fn.greeting,to -> {                                      [functions defined with: `fn.<name>,<argument>,..., -> {<body>};`] 
   let.message -> strcat.hello,to;                       [functions are right-associative]

   stdo.message;                                         [since 'io' was brought into global scope, we
                                                         do not prefix it with a namespace/]
};

fn.sum_all,_ -> {                                        [variadic functions are possible with the reserved '_' argument,
                                                         which is treated as an array]
   return.foldl.sum,0,_;  
};

fn.fibonacci,n -> {
   if.or.(eq.n, 0), (eq.n, 1) -> {                       [functions ending in '?' should be predicates]
      return.1;
   };
   return.sum.
      (fibonacci. sub.n, 1), 
      (fibonacci. sub.n, 2);   
};

fn.main -> {                                             [where our code will begin executing]
   greeting.[comments can be placed *anywhere*]'world.';
   exit.0;                                               [exit with code 0 for success]
};