3

对 Elm 进行排序时使用什么排序算法List

> sort [1,3,5,6]
[1,3,5,6] : [comparable]

什么是[comparable]类型以及如何取回number

> [1,2]:: (sort [3,2,1])
[1 of 1] Compiling Repl                ( repl-temp-000.elm )
Type error on line 4, column 3 to 24:
        [1,2] :: (sort [3,2,1])

   Expected Type: [number]
     Actual Type: comparable

这可能是了解ListElm 如何实现的好时机,但我现在不想问任何太深的问题。只需启动并运行它。

4

1 回答 1

8

Sort 将列表转换为 javascript 数组,然后对其调用 sort ,然后将结果转换回 elm 列表。这意味着排序本身是浏览器使用的任何实现(绝对是订单大小 * log(size) 算法)。

榆树排序的来源:https ://github.com/elm-lang/Elm/blob/20ccc834c1a597d1ef356c14073670b62f90d875/libraries/Native/List.js#L267-L269

comparable类型很有趣,但确实包含数字。您的代码的问题是您使用的是(::)(发音为 cons)而不是(++)发音为 append。你想做:

sorted = [1,2] ++ (sort [6,5,4,3])

示例:http ://share-elm.com/sprout/53dd978ce4b07afa6f983b7d

希望这可以帮助!

于 2014-08-03T02:00:26.153 回答