(sml) 我将制作一个函数,用 Lisp 表示法漂亮地打印字符串树

问题描述

事实上,我并不确切知道“lisp 符号”是什么意思。 所以我试图让它尽可能类似于列表格式,但我不能像一个例子一样表达它,因为 () 或 (,) 看起来是一样的。 我如何表示像示例一样的列表?


  • 我的 sml 代码

    数据类型 'a Tree = null | Tree of 'a Tree 列表 | 'a 的叶子;

    有趣的prettyprint(null) = [] |漂亮打印(叶(v))= [v] |漂亮打印(树(h::t)) = 漂亮打印(h) @漂亮打印(树(t)) | Prettyprint(Tree([])) = []

    val ex = Tree [leaf( 2,3,( 1,3 ),4,( ( 3 ) ),7 )];


  • 代表的例子:

    val it = " ( 2 3 ( 1 3 ) 4 ( ( 3 ) ) 7 ) " : 字符串


解决方法

这可能不是您的确切解决方案。但是 Lisp 是一个历史悠久的编程语言家族,并且有一个独特的、完全用括号括起来的前缀符号。

在 Lisp 中表示源代码时,表达式的第一个元素通常是运算符或函数名,其余元素都被视为参数。这称为“前缀表示法”或“波兰表示法”。例如,C 中写成 4 == (2 + 2) 的布尔表达式在 Lisp 的前缀表示法中表示为 (= 4 (+ 2 2))。

您可以在网络中找到许多前缀(或预排序)算法,并根据您的程序语言实现它。

enter image description here