繁体   English   中英

如何在Haskell中实现++?

[英]How to implement ++ in Haskell?

嗨,我是Haskell编程的新手。 我正在尝试自己实现运算符“++”。 这是我写的一个小程序,但它不起作用:

append (es:e) xs = 
    if (null es)
    then e:xs
    else append es (e:xs)

我收到了很多关于[a],[[a]]和[[[a]]]的类型错误。 关于Haskell中的列表类型仍然令人困惑。 有人可以帮助我吗? 谢谢。 :)

append (es:e) xs =
        ^^^^

通常情况下,你会写(e:es) ,这可以在“es列表之前”之前说出来。 你实际上已经在下面使用了这个含义,但是告诉编译器es是一个元素而e是一个列表 - 它会产生你收到的类型错误。

    if (null es)

这不是你应该如何测试一个emtpy列表。 实际上,如果你调用append [] …你会得到一个“非详尽模式”错误,因为(e:es)总是至少有一个元素的列表。 所以尝试两种模式:

append []     xs = xs
append (e:es) xs = append es (e:xs)

但是,这仍然无法工作 - 第一个列表实际上是通过此代码段反转的。 相反,第一个元素( e )需要在列表的其余部分( esxs )之前:

append (e:es) xs = e : (append es xs)

(这确实++的实现方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM