如何不在球拍中重复代码

how not to duplicate code in 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))
        )
    )
)