[a] tupleToList ((a,b):xs) = a : b : tupleTo-6ren">
gpt4 book ai didi

haskell - 解释这个haskell函数 "list of tuples to list"

转载 作者:行者123 更新时间:2023-12-04 16:42:08 26 4
gpt4 key购买 nike

我是初学者,基本上我需要解释 this

他用这个代码回答:

tupleToList :: [(a,a)] -> [a]
tupleToList ((a,b):xs) = a : b : tupleToList xs
tupleToList _ = []

但我不明白他为什么不使用:
tupleToList [] = []
tupleToList ((a,b):xs) = a : b : tupleToList xs

就像我通常在指南的第一个练习中看到的那样。
我知道 '_' 是什么,但是,当列表为空时,使用 '[]' 不是更好吗?

最佳答案

Like I usually see in the first exercises of the guides. I know that _ is whatever, but, isn't better to use [] that mean, when the list is empty?



从语义上讲,两者是相同的,因为 2 元组只有一个构造函数 (a,b) , 一个列表有两个构造函数 [](h:t) .

由于第一个子句不匹配的唯一模式是空列表,通配符 _相当于 [] .

[]((a,b):xs)是析取模式(即没有可以匹配两个模式的值),当 [] 时,两个模式的顺序无关紧要。是明确使用的。那么我们可以按照我们喜欢的任何顺序编写它。

一些 Haskell 程序员更喜欢使用显式模式(所以用 [] 而不是 _ ),因为这意味着我们知道我们实际使用该子句处理哪些值。如果稍后 Haskell 社区决定引入一个额外的列表构造函数(是的,对于不太可能的列表,但对于其他 data 类型这可能更合理),Haskell 编译器可以(使用 -Wincomplete-patterns )发出警告有些模式没有涵盖。通配符当然涵盖所有模式,但也许右边的表达式不是我们打算用于附加构造函数的表达式。

因此,我建议仅在您想通过同一个子句匹配多个模式时才使用通配符。如果很清楚另一种模式是什么,最好是明确的。正如 Python 之禅所说(是的,它是 Python,但大多数概念在某种程度上是通用的):“显式优于隐式”。

关于haskell - 解释这个haskell函数 "list of tuples to list",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50445974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com