C语言链表基本操作:Haskell中链表的基本操作

我想在 Haskell 中为链表编写一些基本的列表操作,但我可以用这只手。我想将一个列表附加到另一个列表,但它根本不起作用,这是我的代码:

data ML a = E | L a (ML a) deriving (Show)
myList = (L 1 (L 2 (L 3 (L 4 E))))
myHead :: ML a -> a
myHead E = error "empty list"
myHead (L a _) = a
myTail :: ML a -> ML a
myTail E = error "empty list"
myTail (L _ a) = a
myAppend :: ML a -> ML a -> ML a
myAppend E a = a
myAppend (x L xs) ys = x L (xs myAppend ys)

我也有一个问题,如何显示这个列表作为一个字符串,如“1,2,3”。我有一个函数,显示它作为这样的列表 [1,2,3],但不是作为一个字符串。

toString :: ML a -> [a]
toString E = []
toString (L a l) = a:(toString l)
2

我认为基本问题在最后一行:

myAppend :: ML a -> ML a -> ML a
myAppend E a = a
myAppend (x L xs) ys = x L (xs myAppend ys)

构造函数是L,在 Haskell 中,通常在其参数之前写入构造函数,例如:

myAppend :: ML a -> ML a -> ML a
myAppend E a = a
myAppend (L x xs) ys = L x (myAppend xs ys)

现在它应该工作。

关于您的第二个问题:toString ML a -> [a]。实际上,[a]是一个列表,而不是String(嗯,StringChars:type String = [Char]),您猜怎么着:Haskell 中的列表实际上是一个链接列表。

如果你想写一个String,这意味着元素应该有一个文本表示。你可以用类型约束来写,比如Show a =>。所以现在签名是:toString :: Show a => ML a -> [String]

我们可以将a的列表转换为文本表示形式,方法是map将所有元素 ping 到其文本表示形式,然后使用逗号intercalate :: [a] -> [[a]] -> [a],例如:

import Data.List(intercalate)
toList :: ML a -> [a]
toList E = []
toList (L x xs) = x : toList xs
toString :: Show a => ML a -> String
toString = intercalate "," . map show . toList

或者我们可以“自己实现功能”:

toString :: Show a => ML a -> String
toString E = ""
toString (L x E) = show x
toString (L x xs) = show x++',' : toString xs

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(785)
空间服务商:加密服务提供商 (CSP)(the windows cryptographic service provider r
上一篇
Plc编程标准化:检测异常值的标准化还是标准化
下一篇

相关推荐

  • Ccc标志:匹配所有从开始到 /aaa-bbb-ccc/不包括/aaa-bbb-ccc/

    关于Ccc标志的问题,在bbb def中经常遇到,考虑以下字符串:…

    2022-11-23 08:44:22
    0 57 99
  • Ccc z:匹配所有从开始到 /aaa-bbb-ccc/不包括/aaa-bbb-ccc/

    关于Ccc z的问题,在bbb def中经常遇到,考虑以下字符串:…

    2022-11-23 08:43:12
    0 90 50
  • linux切换到超级用户:```shecho 'Hello World' > hello_world.txt```

    Linux切换到超级用户的方法有两种:使用su命令:…

    2023-03-24 09:03:15
    0 33 38
  • cv树洞柒夜事件CV树洞中的秘密与惊奇

    cv树洞柒夜事件是一个有趣的计算机视觉活动,它提供了一种新的方式来利用计算机视觉技术来探索和发现景观。它始于2020年7月,由一群热爱计算机视觉的研究者和开发者发起,他们希望通过使用机器学习技术来探索景观中的精彩之处。cv树洞柒夜事件的目标是使用机器学习技术来探索景观中的精彩之处,并利用这些发现来改善景观设计。参与者需要使用机器学习技术来探索景观,并利用这些发现来改善景观设计。参与者可以使用Python,OpenCV,TensorFlow等技术来完成任务,并将其发布在GitHub上。…

    2023-01-09 12:42:42
    0 94 90
  • code键 A Guide to Success

    示例示例code键是一个特殊的键,它可以用来输入代码。它通常位于键盘的右上角,并且有一个特殊的图标,如“#”或“@”。下面是一个简单的代码示例,使用code键来输入代码:…

    2023-03-24 02:28:58
    0 11 93
  • cvt变速箱异响:排查CVT变速箱异响的方法

    cvt变速箱异响是指变速箱在运行时发出的异常噪音,这种异响可能是由于变速箱内部零件磨损、油质不佳或润滑不良等原因引起的。代码如下:…

    2023-02-13 07:48:44
    0 69 22
  • cheers for还是to:Cheers to a Bright Future!

    示例示例Cheers for和to都可以用来表达祝福或者庆祝的意思。Cheers for:表示对某人或某事的支持,是一种赞扬的表达方式。…

    2023-02-27 02:56:18
    0 53 68
  • css初始化样式:This is a Title

    示例示例CSS初始化样式是指在各浏览器中重置默认的样式,以便于在所有浏览器中保持一致的显示效果。下面是一个常用的CSS初始化样式代码:…

    2023-01-12 02:04:17
    0 73 61

发表评论

登录 后才能评论

评论列表(38条)