shithub: limbobyexample

Download patch

ref: b6a2e83b6a1464cd4dad074c20c460b075dbbe61
parent: e82759b53cfb05e27ff192bd56f07e01b13b9d43
author: henesy <henesy.dev@gmail.com>
date: Mon Mar 4 16:55:44 EST 2019

add Functions example

--- /dev/null
+++ b/Functions/README.md
@@ -1,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?
--- /dev/null
+++ b/Functions/func.b
@@ -1,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;
+}
--- a/README.md
+++ b/README.md
@@ -35,6 +35,7 @@
 - [If Else](./If-Else)
 - [Switch Case](./Switch)
 - [Arrays](./Arrays)
+- [Functions](./Functions)
 
 ## References