Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- (define (prompt st)
- (display st)
- (flush-output)
- (read-line))
- (define (nth n xs)
- (car (drop xs n )))
- (define (create-menu . args)
- (cons 'menu args))
- (define (add-to-menu item menu)
- (cons 'menu (cons item (cdr menu))))
- (define (runmenu menu)
- (let loop [(xs (cdr menu)) (i 1)]
- (if (null? xs)
- (list)
- (begin
- (display i)
- (display ". ")
- (display (cadar xs))
- (newline)
- (loop (cdr xs) (+ 1 i)))))
- (let [(selection (guard-get-num "> "))]
- (if (integer? selection)
- (if (and (<= selection (length menu)) (> selection 0))
- (car (nth selection menu))
- (begin
- (display "Invalid Selection\n")
- (runmenu menu)))
- (begin
- (display "Invalid Selection\n")
- (runmenu menu)))))
- (define (guard-get-num st)
- (let [(n (string->number (prompt st)))]
- (if (not (number? n))
- (begin (display "Not a valid number.\n")
- (guard-get-num st))
- n)))
- (define (gen-get-nums f)
- (λ () (f
- (guard-get-num "Number 1? ")
- (guard-get-num "Number 2? "))))
- (define (quit)
- (display "Goodbye!\n")
- (exit))
- ((runmenu
- (create-menu
- (list (gen-get-nums +) "Add two numbers")
- (list (gen-get-nums *) "Multiply two numbers")
- (list (gen-get-nums /) "Divide two numbers")
- (list (gen-get-nums -) "Subtract two numbers")
- (list quit "Quit"))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement