wisp
 
(Arne Babenhauserheide)
2017-02-05: implement nicer challenges format tip

implement nicer challenges format

diff --git a/examples/duel.w b/examples/duel.w
--- a/examples/duel.w
+++ b/examples/duel.w
@@ -8,11 +8,13 @@ exec guile -L "$W" --language=wisp -l "$
 
 import : examples enter-three-witches
 
+set! *random-state* : random-state-from-platform
+
 Enter : Galtag Nimbleday
         Lowlife Pirate
         choose your answer
 
-define answers
+define challenges
   `
     : You fight like a Dairy Farmer!
       How appropriate! You fight like a cow!
@@ -21,31 +23,35 @@ define answers
 ; write answers
 ; newline
 
-define answers
-  ' 
-    . "How appropriate! You fight like a cow!"
-    . "And I've got a little TIP for you, get the POINT?"
+define : random-challenge
+         list-ref challenges : random : length challenges
+
+define : list->textline L
+         string-join : map ->string L
+                     . " "
 
 ;; TODO: use macro define-interaction
 define : duel me other
-  say-name other 
-  say-words 
-    : 
-      You fight like a Dairy Farmer!
-  say-name ' : choose your answer
-  say-words
-       : ,(let ((counter 0))
-           (string-join 
-             (map (λ (x) 
-                     (set! counter (+ 1 counter))
-                     (string-append (number->string counter) "  " x)) answers) "\n  "))
-  let
-    : answer : list-ref answers (- (string->number (format #f "~a" (peek-char))) 1)
-    drain-input (current-input-port)
-    say-name me
+  let*
+    : challenge : random-challenge
+      tease : list->textline : car challenge
+      answers : map list->textline : cdr challenge
+    say-name other
     say-words
-      :
-        ,answer
+      : ,tease
+    say-name ' : choose your answer
+    say-words
+         : ,(let ((counter 0))
+             (string-join
+               (map (λ (x)
+                       (set! counter (+ 1 counter))
+                       (string-append (number->string counter) "  " x)) answers) "\n  "))
+    let
+      : answer : list-ref answers (- (string->number (format #f "~a" (peek-char))) 1)
+      drain-input (current-input-port)
+      say-name me
+      say-words
+        : ,answer
     
 
 define-syntax-rule : Duel fighter1 fighter2