Elm排序和[可比较性]

3
当我对 Elm 的 List 进行排序时,使用了哪种排序算法?
> sort [1,3,5,6]
[1,3,5,6] : [comparable]

什么是[可比较的]类型,如何将其转换为数字
> [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

现在可能是了解Elm中List实现的好时机,但我现在并不想问太深入的问题。只需让它运行起来。

1个回答

8

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

elm中sort的源代码: 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

希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接