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的两门短课
答案 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这样的生态系统中都没有使用它。没有理由避免它。如果您想保留一些代码,请记住要复制代码。