首页 > 解决方案 > 您如何比较球拍中的 3 个或更多参数?

问题描述

我知道在 Racket 中比较例如两个数字,你会得到这样的结果。

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

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

(define (myMax x y z)

标签: racketcomparison-operators

解决方案


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

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

您可以在另一篇文章中找到实现: https ://stackoverflow.com/a/42463097/10953006

编辑 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:如果真正的问题是关于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)

推荐阅读