使用sortByFst时出错:变量不在范围内

r n*_* ne 1 haskell

Prelude> sortByFst = sortBy (\x y -> fst x `compare` fst y)

<interactive>:7:13: error:
    Variable not in scope:
      sortBy :: (((), b0) -> ((), b1) -> Ordering) -> t
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?

Jos*_*ica 7

您试图调用名为的函数sortBy,但GHCi并未发现任何此类函数。发生这种情况是因为sortBy存在Data.List而不存在Prelude。要使用除之外的其他任何模块Prelude,您需要导入它们,这样import Data.List可以使您的代码正常工作。

另外,对于您正在执行的操作,这sortBy是该工作的错误工具。您的lambda等于comparing fst,并且sortBy (comparing fst)与相同sortOn fst。因此,sortByFst = sortOn fst它与您的代码执行相同的操作,但是更加简单快捷。

  • 我怀疑会更快。毕竟sortOn fst必须保留元组((a,(a,b)))以免重新计算“昂贵的”投影`fst` ...(但总的来说,我超级赞成*`On`代替*`By`函数,也是出于正确性的原因) (2认同)