米兰达经历了清单

时间:2011-10-29 10:00:05

标签: functional-programming miranda

有没有简单的方法来浏览列表? 假设我想访问列表中的第5个数据而不知道它是B

["A","A","A","A","B","A","A","A","A"]

有没有办法可以做到这一点,而无需对列表进行排序?

3 个答案:

答案 0 :(得分:4)

我不太了解米兰达,但我希望功能skiptake可用。

你可以通过跳过一个函数来解决第五个元素。如果没有跳过和拍摄,很容易自己创建它们。

跳过:跳过列表中的y个元素,当y大于列表中的项目数时,它将返回一个空列表

take:获取列表中前y个元素,当y大于列表中的项目数时,将返回完整列表。

skip y []     = []
skip 0 xs     = xs
skip y (x:xs) = skip xs (y-1)

take y []     = []
take 0 xs     = []
take y (x:xs) = x : take (y-1) xs

elementAt x xs = take 1 (skip x xs)

答案 1 :(得分:2)

列表是归纳数据类型。这意味着在列表上定义的函数 - 例如,访问 nth 元素 - 由递归定义。您正在寻找的数据结构似乎是一个数组,允许持续时间查找。在列表中的索引处查找元素的最简单方法是直接:

lookup :: Int -> [a] -> Maybe [a]
lookup n []     = Nothing
lookup 0 (x:xs) = Just x
lookup n (x:xs) = lookup (n - 1) xs

答案 2 :(得分:2)

另一种方法是使用!运营商。假设您有一个包含列表中已定义数据的程序,例如:

plist = [A,A,A,A,B,A,A,A,A]

然后执行plist!4将为您提供该列表的第5个元素。 (如果你包括0,1,2,3,4,则4为第5单位)

所以plist!4返回B.