我试图编写一个程序,在输入中接受由[[1,2],[3,4],[5,6]]
等列表列表生成的矩阵,并将其转置为[[1,3,5],[2,4,6]]
。
此版本有效,但它会出错,因为它到达列表末尾并且不会停止。
transpose xxs = map head xxs : transpose (map tail xxs)
所以我尝试了这个
transpose xxs = if ((length xxs)>0) then
map head xxs : transpose (map tail xxs)
但是我收到了错误
解析错误(可能是错误的缩进或括号不匹配)
所以我尝试编写没有括号的代码,全部在一行中,没有缩进但是我没有设法解决这个错误。
我开始怀疑它不是括号或空格的问题。
答案 0 :(得分:1)
我无法开始猜测为什么编译器会向您提供该错误消息,但在Haskell中,所有if/then
表达式也需要else
个案例:
transpose xxs =
if (length xxs) > 0
then map head xxs : prova (map tail xxs)
else [[]]
这里我只是将[[]]
放在else
分支中,因为这是我能想到满足编译器的最简单的事情。