你如何比较球拍中的 3 个或更多参数?

How do you compare 3 arguments or more in racket?

我知道在 Racket 中比较例如两个数字你会得到类似的东西。

  (define (myMax x y)
           (if (< x y) y x))

我的问题是如何比较具有 3 个或更多参数的函数。例如从参数中获取最大的数字。

(define (myMax x y z)

如果要处理未定义数量的元素,则需要使用 list

惯用的方法是使用recursion 来处理元素。每个函数调用需要处理一个元素 (car) 和列表的其余部分 cdr.

您可以在另一个 post 上找到实现:

编辑 1:示例

(define (maximum L)
     (if (null? (cdr L)) 
         (car L) 
         (if (< (car L) (maximum (cdr L)))  
             (maximum (cdr L)) 
             (car L))))

(maximum '( 1 2 3 ))
(maximum '( 1 2 3 4))
(maximum '( 1 2 3 4 5))

给出结果:

3
4
5

编辑 2:如果真正的问题是关于 Racket 中的 variable number of arguments,您可以使用以下符号:

(define (test-function . L)
  (printf "~S~%" L)) ;; Here: L is the list (1 2 3)

(test-function 1 2 3)

将显示 (printf):

(1 2 3)