如何在 Racket 中不复制代码



好吧,我遇到了一个我编写的函数,它多次使用相同的代码。

下面是一个示例:

(define (get-min&max-from-mixed-list mixedList)
  (if (null? (sublist-numbers mixedList))
      '() 
      (min&maxRec (sublist-numbers mixedList) 
                  (first (sublist-numbers mixedList)) ; this
                  (first (sublist-numbers mixedList))) ; and this
      )
  )

在过程编程语言中,我会这样做:

   int x =  (first (sublist-numbers mixedList))
   min&maxRec(sublist-numbers(mixedList) , x , x)

根据我对函数式语言的理解,我们不会将东西保存在内存中,然后我们使用它们。那么我怎么能不重复代码呢?

您可以使用

let将值绑定到符号,并在let体内随意使用该符号。

它和相关表格的文档在这里:https://docs.racket-lang.org/reference/let.html

您可以在示例中使用它,如下所示:

(define (get-min&max-from-mixed-list mixedList)
    (let ((snm (sublist-numbers mixedList)))
        (if (null? snm)
            '() 
             (min&maxRec snm 
                         (first snm)
                         (first snm))
        )
    )
)

最新更新