Fun*_*lio 1 lisp scheme common-lisp
我一直在研究一些清晰的东西,但在某些时候,我无法理解。
所以我知道这张图片代表(a b c x d):
但是,我没有得到的是这个会发生什么:
既然有一个什么都没有,就指向了两个东西,bx和da有两种方式的括号怎么写
我会写它,(c((b(x))(d(a))))但我不太确定。
感谢您的回答,我很感激;
小智 6
我认为思考这些的有用方法是意识到两件事:
无用的速记是这样绘制的框:
实际上就是这样:
()传统上nil在 Lisp 中被称为但在 Scheme 中没有名称(我认为)作为标准的独特“空盒”对象在哪里。
所以知道了这个速记你就可以拍出你有的照片了,这和这张是一样的
并展开到这个
所以,好的,现在你有了这个展开的图片,你可以简单地把它的表示写成文本,记住 cons 单元的表示很简单(l . r),比如,wherel和r是左右元素,以及空盒对象是()。
我不打算写下你的问题的文字表示,因为我不想做你的家庭作业——我想解释如何做你的家庭作业!– 但我会写下这个的表示,比如:
好吧,只要按照这些框,我们就会得到一个表示,它是
((x . ()) . (y . ())
Run Code Online (Sandbox Code Playgroud)
哎呀,这不像你需要得到的那种答案。
但一切都没有丢失。现在你需要知道最后一件事:有三个特殊规则适用于打印(或读取)像这样的 conses 树(图)。
(<anything> . ())为 s 的cons可以写成 s (<anything>)。(x . (y . ...))可以写成(x y . ...),例如。因此,让我们将这些规则应用于上述结构。
((x . ()) . (y . ());((x) . (y));((x) y)。这是喜欢那种你希望提供的代表性。作为应用这些规则的指南,最好从内到外应用它们,并应用所有规则 1,然后遵循规则 2。
所以总而言之,我建议的方法是:
()删除的简写重新绘制图表;(... . ...);