我应该避免使用交互模式吗?

时间:2019-11-18 14:18:13

标签: haskell interactive

Haskell新手在这里。我使用ghci来实现婴儿quicksort算法[1],如下所示:

Prelude> quicksort (firstx:xs) = quicksort[x|x<-xs, x<firstx] ++ [firstx] ++ quicksort[x|x<-xs, not(x<firstx)]
Prelude> quicksort [] = []

命令quicksort [1,2,3]然后给出错误:

  

***例外:: 8:1-17:函数quicksort中的非穷尽模式

但是,在quicksort.hs文件中键入完全相同的内容并运行$ ghci quicksort.hs不会产生这样的错误。

问题

有什么区别?避免使用交互模式是一种经验法则吗?

参考

[1]雷克斯页面。 Haskell的两门短课

1 个答案:

答案 0 :(得分:5)

通常,在文件中定义多行函数然后加载:l <module>或重新加载:r会更容易,但是我有时确实会直接在GHCi中以{{1 }}和:{

:}
如果您在GHCi中忘记了任何命令,

:{ quicksort (firstx:xs) = quicksort[x|x<-xs, x<firstx] ++ [firstx] ++ quicksort[x|x<-xs, not(x<firstx)] quicksort [] = [] :} 很有用。

编辑:忘记回答问题的第二部分。

  

一个经验法则是应该避免使用交互模式?

交互模式是一个很好的工具,我在其他诸如ReasonML这样的生态系统中都没有使用它。没有理由避免它。如果您想保留一些代码,请记住要复制代码。