From bf84e85126b93048c09fab5f5d0addf0c72690a1 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Tue, 10 Sep 2019 04:52:59 -0700 Subject: [PATCH] numbers-game: simplify for readability. --- extra/numbers-game/numbers-game.factor | 40 ++++++++------------------ 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/extra/numbers-game/numbers-game.factor b/extra/numbers-game/numbers-game.factor index 6fae3d99c5..83dd42392f 100644 --- a/extra/numbers-game/numbers-game.factor +++ b/extra/numbers-game/numbers-game.factor @@ -1,39 +1,23 @@ -USING: kernel math math.parser random io ; +USING: combinators io kernel math.order math.parser random ; IN: numbers-game -: printfl ( s -- ) - print flush ; - -: writefl ( s -- ) - write flush ; - -: read-number ( -- n ) - readln string>number ; - : guess-banner ( -- ) - "I'm thinking of a number between 0 and 100." printfl ; + "I'm thinking of a number between 0 and 100." print flush ; -: guess-prompt ( -- ) "Enter your guess: " writefl ; +: guess-number ( -- n ) + "Enter your guess: " write flush readln string>number ; -: too-high ( -- ) "Too high" printfl ; - -: too-low ( -- ) "Too low" printfl ; - -: correct ( -- ) "Correct - you win!" printfl ; - -: inexact-guess ( actual guess -- ) - < [ too-high ] [ too-low ] if ; - -: judge-guess ( actual guess -- ? ) - 2dup = [ 2drop correct f ] [ inexact-guess t ] if ; - -: number-to-guess ( -- n ) 100 random ; +: correct? ( actual guess -- ? ) + <=> { + { +lt+ [ "Too high" print flush f ] } + { +eq+ [ "Correct - you win!" print flush t ] } + { +gt+ [ "Too low" print flush f ] } + } case ; : numbers-game-loop ( actual -- ) - dup guess-prompt read-number judge-guess - [ numbers-game-loop ] [ drop ] if ; + [ dup guess-number correct? not ] loop drop ; : numbers-game ( -- ) - guess-banner number-to-guess numbers-game-loop ; + guess-banner 100 random numbers-game-loop ; MAIN: numbers-game