gpt4 book ai didi

haskell - 在 Haskell 中实例化列表的最短方法是什么?

转载 作者:行者123 更新时间:2023-12-02 05:57:01 26 4
gpt4 key购买 nike

假设我有一个数据类型 Person 定义如下,使用记录语法:

data Person = Person { name :: String
, age :: Int
} deriving (Show)

然后我使用以下方法实例化了一个 Person 列表:

people = [Person {name="Alice",   age=27},
Person {name="Bob", age=23},
Person {name="Mallory", age=26}]

然后我意识到一次定义列表的许多元素会很笨重,因为单词 nameage 是重复的。因此,我将代码简化为:

people = [(Person "Alice"   27),
(Person "Bob" 23),
(Person "Mallory" 26)]

既然 Haskell 中的列表无论如何都是同质的,我怎样才能避免在列表的每个元素中指定 Person 类型?例如,按照以下代码(无法编译)执行某些操作:

Person people = [("Alice"   27),
("Bob" 23),
("Mallory" 26)]

Link to runnable example

最佳答案

Person,作为数据值的构造函数,本身就是一个(二进制)函数。您可以从元组列表构建此列表:

people = map (uncurry Person) [("Alice", 27), ("Bob", 42)]

或者您可以从姓名列表和年龄列表构建它:

people = zipWith Person ["Alice", "Bob"] [27, 42]

... 或许多其他选项。

关于haskell - 在 Haskell 中实例化列表的最短方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49582021/

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