在球拍中比较变量?

问题描述 投票:0回答:1

我正在尝试创建一个函数,要求用户输入多个整数,然后输出变量中最小的那个。(例如,输入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)])]))
if-statement scheme racket typed-racket typed
1个回答
0
投票

如果用户输入是列表,我们可以放弃更大的数字。

; 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
© www.soinside.com 2019 - 2024. All rights reserved.