-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
75 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters