如何不在Racket中复制代码

时间:2018-04-08 16:37:30

标签: functional-programming racket code-duplication

我遇到了一个我写过的函数,它使用了相同的代码几次。

这是一个例子:

(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)

根据我对功能语言的理解,我们不会将内容保存在内存中,之后我们会使用它们。那么我怎么能不重复代码?

1 个答案:

答案 0 :(得分:1)

您可以使用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))
        )
    )
)