Skip to content

Commit

Permalink
add Functions example
Browse files Browse the repository at this point in the history
  • Loading branch information
henesy committed Mar 5, 2019
1 parent e82759b commit b6a2e83
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
36 changes: 36 additions & 0 deletions Functions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Functions

Functions in Limbo are similar to functions in Go moreso than functions in C.

## Source

### func.b:13,17

This section shows a function prototype as well as the succeeding function definition. Prototypes in Limbo function similar to prototypes in C.

The function `plus()` takes two integers as arguments and returns their sum.

### func.b:19,21

The function `swp()` takes two integer arguments and returns two integers within a tuple.

Note that the type statement `: int` is only provided once, with the list of variables to the left of the type statement being declared to be integers.

### func.b:36,38

The function `plusplus()` takes three integer arguments and returns their sum, calling the function `plus()` in the process to sum the first two arguments.

The return value of `plus()` is a single variable, so it can be added to `c` without any extra syntactical structures than using the return value as an unnamed variable.

## Demo

; limbo func.b
; func
3 + 5 = 8
7 + 3 + 4 = 14
swap 6,7: 7,6
;

## Exercises

- Try returning more than two values, can tuples store more than two ordered objects?
38 changes: 38 additions & 0 deletions Functions/func.b
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
implement Func;

include "sys.m";
include "draw.m";

sys: Sys;
print: import sys;

Func: module {
init: fn(nil: ref Draw->Context, nil: list of string);
};

plus: fn(a: int, b :int): int;

plus(a: int, b: int): int {
return a + b;
}

swp(a, b: int): (int, int) {
return (b, a);
}

init(nil: ref Draw->Context, nil: list of string) {
sys = load Sys Sys->PATH;

print("3 + 5 = %d\n", plus(3, 5));

print("7 + 3 + 4 = %d\n", plusplus(7, 3, 4));

(t₀, t₁) := swp(6, 7);
print("swap 6,7: %d,%d\n", t₀, t₁);

exit;
}

plusplus(a, b, c: int): int {
return plus(a, b) + c;
}
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ You could then run said file with:
- [If Else](./If-Else)
- [Switch Case](./Switch)
- [Arrays](./Arrays)
- [Functions](./Functions)

## References

Expand Down

0 comments on commit b6a2e83

Please sign in to comment.