gpt4 book ai didi

elm - 您将如何在 elm 中构建电子表格应用程序?

转载 作者:行者123 更新时间:2023-12-04 15:09:36 26 4
gpt4 key购买 nike

我一直在研究 elm,我真的很喜欢学习这门语言。我一直在考虑做一个电子表格应用程序,但我无法理解它的结构。

假设我们有三个单元格; A、B 和 C。
如果我输入 4在单元格 A 和 =A 中在单元格 B 中,我如何让单元格 B 始终等于单元格 A?如果我然后输入 =A+B在单元格 C 中,可以将其评估为 8 ,并在 A 或 B 更改时更新?
不确定如何利用信号来实现这种动态行为..
问候奥斯卡

最佳答案

首先,您需要决定如何表示您的电子表格网格。如果您来自 C 背景,您可能想要使用 2D 数组,但我发现字典实际上在 Elm 中效果更好。所以你可以定义 type alias Grid a = Dict (Int, Int) a .

至于a ,每个单元格包含什么……这是定义特定领域语言的机会。所以像

type Expr = Lit Float | Ref (Int, Int) | Op2 (Float -> Float -> Float) Expr Expr

这意味着表达式要么是文字浮点数,要么是对另一个单元格位置的引用,要么是一个运算符。运算符可以是两个浮点数上的任何函数,以及两个递归计算的其他表达式。根据您的目的,您可以为每个操作定义特定的标签,例如 Plus Expr Expr | Times Expr Expr ,或者您可以为不同数量的操作(如否定)添加额外的 opN 标签。

那么你可以定义 type alias Spreadsheet = Grid Expr ,如果你想别名 (Int, Int)对某事,这也可能有帮助。我还假设您只想在电子表格中 float 。

现在您需要将字符串转换为表达式并返回的函数。这些函数的传统名称是 parseeval .
parse : String -> Maybe Expr -- Result can also work
eval : Spreadsheet -> Grid Float
evalOne : Expr -> Spreadsheet -> Maybe Float

解析会有点棘手; String module是你的 friend 。 Eval 将涉及通过电子表格查找引用文献并以递归方式填写结果。一开始你会想忽略捕获无限循环的可能性。此外,这只是一个草图,如果您发现不同类型的签名效果更好,请使用它们。

至于 View ,我会从只读开始,这样您就可以验证硬编码电子表格是否正确评估。然后您可以担心编辑,其想法是您只需重新运行解析器和评估器并获得要呈现的新电子表格。它应该可以工作,因为电子表格除了每个单元格的内容之外没有其他状态。 (最小化重新计算的工作是您可以扩展它的许多不同方式之一。)如果您使用 elm-html,表格元素应该没问题。

希望这会让你朝着正确的方向前进。这是一个雄心勃勃的项目,我很乐意在您完成后看到它(将其发布到 mailing list )。祝你好运!

关于elm - 您将如何在 elm 中构建电子表格应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576997/

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