【问题标题】:How do you compare 3 arguments or more in racket?您如何比较球拍中的 3 个或更多参数?
【发布时间】:2021-03-10 22:15:05
【问题描述】:

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

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

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

(define (myMax x y z)

【问题讨论】:

  • 您可以为此使用 max 内置程序

标签: racket comparison-operators


【解决方案1】:

如果要处理未定义数量的元素,则需要使用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:如果真正的问题是关于 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 IDE 中测试了代码,它提供了 myMax 的实现,可与列表一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2021-03-20
  • 2019-03-19
  • 2015-12-20
  • 1970-01-01
  • 2021-04-09
  • 2023-02-16
相关资源
最近更新 更多