From f5c4671bfbad96bf346bd7e9a21fc4317b4959df Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Sat, 3 Dec 2022 17:00:20 +0530 Subject: Adds most of the tools --- v_windows/v/examples/lander.v | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 v_windows/v/examples/lander.v (limited to 'v_windows/v/examples/lander.v') diff --git a/v_windows/v/examples/lander.v b/v_windows/v/examples/lander.v new file mode 100644 index 0000000..ad2600d --- /dev/null +++ b/v_windows/v/examples/lander.v @@ -0,0 +1,62 @@ +// Example of sum types +// Models a landing craft leaving orbit and landing on a world +import rand +import time + +struct Moon { +} + +struct Mars { +} + +fn (m Mars) dust_storm() bool { + return rand.int() >= 0 +} + +struct Venus { +} + +type World = Mars | Moon | Venus + +struct Lander { +} + +fn (l Lander) deorbit() { + println('leaving orbit') +} + +fn (l Lander) open_parachutes(n int) { + println('opening $n parachutes') +} + +fn wait() { + println('waiting...') + time.sleep(1 * time.second) +} + +fn (l Lander) land(w World) { + if w is Mars { + for w.dust_storm() { + wait() + } + } + l.deorbit() + match w { + Moon {} // no atmosphere + Mars { + // light atmosphere + l.open_parachutes(3) + } + Venus { + // heavy atmosphere + l.open_parachutes(1) + } + } + println('landed') +} + +fn main() { + l := Lander{} + l.land(Venus{}) + l.land(Mars{}) +} -- cgit v1.2.3