如何使用foldr编写insertionSort?

时间:2016-09-26 18:55:00

标签: haskell

我编写了以下Haskell函数:

SELECT 
  m.ProductID, m.CategoryID, m.ProductName, m.Details, m.Price, m.Stock, 
  k.Status,
  CASE WHEN k.Status <> 1 THEN 'No images' ELSE k.ImageName END AS ImageName, 
FROM Products m 
LEFT JOIN ProductImages k
  ON k.ProductID = m.ProductID AND k.Status = 1

正如您所看到的,“insertionSort”取决于“myInsert”,它们工作正常。现在我被要求在“insertioSort”中使用“foldr”,但我无法取得成功。

我将非常感谢您的反馈。

1 个答案:

答案 0 :(得分:3)

以下是definition of foldr used in GHC

foldr k z = go
          where
            go []     = z
            go (y:ys) = y `k` go ys

为了简单起见,让我们内联go,并使用一些不那么花哨的语法:

foldr k z [] = z
foldr k z (x:xs) = k x (foldr k z xs)

为了比较,这是你的功能:

insertionSort [] = []
insertionSort (x:xs) = myInsert x (insertionSort xs)

注意它们有多相似!您能否弄清k方程式中zfoldrinsertionSort的实现方式相同?

相关问题