你如何比较球拍中的 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)
我知道在 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)