我目前正在做一个讲课的作业,我必须为我们在讲座中定义的语言编写口译员。我的家庭作业的一部分是编写一个函数,它将从我的数据类型中获取表达式并将其转换为字符串。
到目前为止,这是我的数据类型:
datatype basicType = voidType | intType | boolType;
datatype etype = basicType
| tupelType of (etype * etype)
| functionType of etype -> basicType;
请注意,我甚至不确定此数据类型是否正确。 我被允许使用SML函数String.concatWith和Int.toString。
由于这是我应该做的功课,我喜欢只有一个开始,提示和技巧。没有完整的解决方案。
我很感谢你们女孩/家伙的任何意见,因为我将要从这次演讲中失去理智。
答案 0 :(得分:1)
您需要通过递归到每个值来实现可以打印etype
的所有变体的函数。你还需要一个帮助函数来打印basicType
值,它不需要递归,而是作为递归的基本情况。
对于相应数据类型的每个变体,它们都需要一个函数体。处理functionType
的正文也需要应用该函数。
您还应该考虑在每个函数体中添加一些额外的字符串输出,以使读者能够区分不同的类型。
tupelType
例如可以打印如下:(a, b)
其中a
和b
是对每个元组元素的递归调用。