From 30fdfca72ca1277c127c42e86bba2481246db0f7 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Fri, 4 Nov 2022 20:13:29 +0100 Subject: Add state and its representation in states --- depre/main.scm | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/depre/main.scm b/depre/main.scm index 37a3b35..81bdb03 100644 --- a/depre/main.scm +++ b/depre/main.scm @@ -1,8 +1,10 @@ ; https://xn--rpa.cc/irl/term.html (define-module (depre main)) -(define %depression 50) -(define %tiredness 50) +;; Code makes heavy use of functional code and parameters for state. +(define max-100 (lambda (x) (if (> x 100) 100 x))) +(define %depression (make-parameter 50 max-100)) +(define %tiredness (make-parameter 50 max-100)) (define (nth n lst) (if (> n (length lst)) @@ -13,6 +15,8 @@ (car lst) (loop (cdr lst) (- n 1)))))) + +;; Function combinations: they define the state transitions (define (combine . functions) "Calls given functions in given order." (lambda () @@ -21,13 +25,36 @@ ((car fs)) (loop (cdr fs)))))) +;; Simple I/O (define (answer message) (lambda () (display message) (newline))) -(define (state heading menu) +(define (bar percent) + "A simple 12 character bar for life-like variable representation" + (define len 22) + (string-tabulate + (lambda (x) + (cond + ((= x 0) #\[) + ((= x (- len 1)) #\]) + ((>= (/ percent (/ 100 len)) x) #\=) + (else #\space))) + len)) + + +;; Basic state representation and creation: A state is a function that knows +;; how to jump to other states through a menu. +(define* (state heading menu #:optional (hide-status #f)) (lambda () + (when (not hide-status) + (newline) + (display "Depression:\t") + (display (bar (%depression))) + (newline) + (display "Tiredness:\t") + (display (bar (%tiredness)))) (newline) (display heading) (newline) @@ -43,6 +70,7 @@ (display "Wrong answer. Try again > ") (loop (read))))))) +;; States: (define start (state "Hi, game starts" (list (cons "Start game" @@ -52,6 +80,7 @@ (list (cons "hola" (lambda () (display "HOLA"))) (cons "adios" (lambda () (display "adios"))))))) (cons "Quit game" - (answer "Good bye!"))))) + (answer "Good bye!"))) + #:hide-status)) (start) -- cgit v1.2.3