Forth

Forth

困难

说明

实现一个非常简单的 Forth 子集的求值器。

Forth 是一种基于栈的编程语言。 为 Forth 的一个小子集实现一个最基础的求值器。

你的求值器需要支持以下单词:

  • +、-、*、/(整数运算)
  • DUP、DROP、SWAP、OVER(栈操作)

你的求值器还需要支持用惯用语法定义新的单词:: word-name definition ;。

为简单起见,你唯一需要支持的数据类型是至少 16 位的有符号整数。

语法应遵循以下规则:数字是一个或多个(ASCII)数字组成的序列,单词则是一个或多个字母、数字、符号或标点组成的序列,并且不能是数字。 (Forth 实际使用的规则可能略有不同,不过这样已经足够接近了。)

单词不区分大小写。

提示

完成这个练习,你需要创建数据类型ForthState,并实现下面这些函数:

  • emptyState返回一个空的ForthState。
  • evalText对输入的 Text 求值,返回新的状态。
  • toList返回当前栈的数组,其中栈顶元素排在最右边(也就是最后一个)。

代码里已经放好了示例的数据声明和类型签名,但函数的具体定义,以及一个有实际意义的数据类型、newtype 或类型同义词,都要由你来完成。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Haskell Exercism

准备好开始 Forth 了吗?

注册 Exercism,借助 107 个练习 和真人导师指导,学习并掌握 Haskell,全部免费。