我正在尝试创建一个函数,要求用户输入多个整数,然后输出变量中最小的那个。(例如,输入1、4、67的结果为1。)
我尝试分别请求每个整数并将它们存储为变量,但是在建立一个if语句是否良好时会遇到问题,该语句将打印int1,int2或int3,具体取决于哪一个最小。
#lang typed/racket
(require typed/test-engine/racket-tests)
(require "../include/cs151-core.rkt")
;; The necessary .rkt files...
(printf "Enter your first integer: ")
;; Requests user input for first variable
(define int1 (read-line))
;; Stores user input in variable int1
(printf "Enter your second integer: ")
;; Requests user input for second variable
(define int2 (read-line))
;; Stores user input in int2 variable
(printf "Enter your third and final integer: ")
;; Requests user input for third variable
(define int3 (read-line))
;; Stores user input in third variable int3
; (define (int-sorter int1)
; (cond
; [(< int1 int2)
; (display int1)]
; [(> int1 int2)
; (cond
; [(< int2 int3)
; (display int2)]
; [(display int3)])]))
如果用户输入是列表,我们可以放弃更大的数字。
; lon = list-of-number
(define (mini lon)
(local ((define (aux n lon)
(cond
[(empty? lon) n]
[(< n (first lon))
(aux n (rest lon))]
[(> n (first lon))
(aux (first lon) (rest lon))]
[else
(aux (first lon) (rest lon))])))
(aux (first lon) lon)))
(mini(range -100 100)) ; -100
; or use foldr
(define (mini-v2 lon)
(local ((define (which-smaller? n1 n2)
(cond
[(< n1 n2) n1]
[(> n1 n2) n2]
[(= n1 n2) n1])))
(foldr which-smaller? 0 lon)))
(mini-v2 (range -100 100)) ; -100
如果输入许多变量,lambda将使参数成为列表。然后,我们按升序对其进行排序。然后第一个元素最小。
#lang racket
(define (mini . n)
(first (sort n <)))
(mini (range -100 100)) ; -100