gpt4 book ai didi

types - 如何使用 Elm 自定义类型为 5 个骰子值建模?

转载 作者:行者123 更新时间:2023-12-05 09:26:41 25 4
gpt4 key购买 nike

我正尝试在 Elm 中制作一个简单的骰子游戏。我将有一个包含 5 个、6 个面的骰子的“骰子杯”。当您“掷”骰子时,您会得到 5 个随机骰子值。最后,“1”值被认为是“百搭”值,可以用来代替任何其他骰子值。

所以目前,我已经使用 Random.generate 命令来生成 List 的值之间的 5 Int 1 和 6:

Roll ->
( model
, Random.generate NewRoll (Random.list 5 (Random.int 1 6))
)

所以,我可以像这样模拟我的杯子:type alias Cup = List Int

但我认为围绕我的数据添加更多形式化可能会很有值(value)。特别是看完之后this article这让我感到鼓舞,我应该更像这样建模我的数据:

type alias Cup = List Die

type Die
= One
| Two
| Three
| Four
| Five
| Six

虽然我正在为一些事情而苦苦挣扎。首先,虽然这种 Die 类型感觉像是一种更明确和准确的建模 Cup 包含的内容的方法,但我正在努力确定我将如何关联这些类型具有实际整数值的变体值。当我使用我的随机数生成器时,它会生成整数。

我如何将它们与我的命名类型协调起来?即使我可以,我如何去另一个方向?我最终需要在我的杯子上执行一些逻辑来确定卷的“好”程度,这将涉及评估哪些值比其他值大,以及每个值我有多少。

我的倾向是应该有一个整数值与每个变体相关联以形成数据构造函数One Int,但这是不对的。这意味着任何整数都可以与变体 One 相关联,这不是我想要的。我只想要整数:1

我的第二个倾向是让我的 Die 类型使用像 Die int 这样的类型参数,而忘记变体,而是将 die 值直接与 相关联>模具类型。这将允许其他类型的数据与 Die 类型相关联,例如 Bool 表示骰子是否为 wild。然而,我突然想到事情并不是这样运作的。类型参数似乎用于为类型 Die 的变体提供不明确的数据类型。我无法制作独立的 Die Int 类型。

所以我不确定我从这里去哪里。自定义类型感觉像是我的数据建模的答案,但此时我想知道我是否真的应该使用记录?

我还想知道是否有某种方法可以一直 适应我的类型变体。是否可以随机生成这些类型变体?但是,我如何才能将这些变体值与逻辑进行比较呢?

最佳答案

下面的怎么样?

type Die
= One
| Two
| Three
| Four
| Five
| Six


type Cup
= Cup Die Die Die Die Die


die : Random.Generator Die
die =
Random.uniform One [ Two, Three, Four, Five, Six ]


cup : Random.Generator Cup
cup =
Random.map5 Cup die die die die die


toInt : Die -> Int
toInt d =
case d of
One ->
1

Two ->
2

Three ->
3

Four ->
4

Five ->
5

Six ->
6

关于types - 如何使用 Elm 自定义类型为 5 个骰子值建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73520306/

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