Scheme 如何将方框表示转换为括号表示
有一段时间我一直在做一些清晰的事情,但在某个时候,我无法理解 所以我知道这幅图代表的是Scheme 如何将方框表示转换为括号表示,scheme,lisp,common-lisp,Scheme,Lisp,Common Lisp,有一段时间我一直在做一些清晰的事情,但在某个时候,我无法理解 所以我知道这幅图代表的是(a b c x d): 但是,我不知道这一次会发生什么: 因为有一个上面没有任何东西,它指向两件事,如何用括号写下bx和da有两种方式 我会写它(c((b(x))(d(a))),但我不是很确定 谢谢你的回答,我很感激 我认为思考这些问题的有效方法是认识到两件事: 所有的盒子都是cons单元,也就是成对的 有一种略显无用的速记被使用,如果你在没有速记的情况下重新绘制图表,它更容易翻译 没有帮助的速记是这
(a b c x d)
:
但是,我不知道这一次会发生什么:
因为有一个上面没有任何东西,它指向两件事,如何用括号写下bx和da有两种方式
我会写它(c((b(x))(d(a))),但我不是很确定
谢谢你的回答,我很感激 我认为思考这些问题的有效方法是认识到两件事:
- 所有的盒子都是cons单元,也就是成对的李>
- 有一种略显无用的速记被使用,如果你在没有速记的情况下重新绘制图表,它更容易翻译
()
是唯一的“空框”对象,在Lisp中传统上称为nil
,但在Scheme中没有名称(我认为)作为标准
所以知道了这个速记,你就可以拍下你的照片,这张照片和这张一样
然后把它展开到这个
好了,现在你有了这张展开的图片,你可以简单地写下这张图片的文本表示形式,记住cons单元格的表示形式是(l.r)
,比如说,l
和r
是左右元素,空框对象的表示形式是()
我不打算写下你问题的文本表述,因为我不想做你的家庭作业——我想解释如何做你的家庭作业但我会写下这方面的表述,比如:
好的,按照方框我们得到一个表示,它是
((x . ()) . (y . ())
哎呀,这可不是你需要得到的答案
但这一切并没有失去。现在您需要知道最后一件事:有三条特殊规则适用于打印(或读取)这样的conse树(图)
- 规则1.格式为
的cons可以写成(.())
()
- 规则2。右手输入(cdr)本身就是cons的cons可以省略圆点,并将右手cons拼接在一起。例如,
可以写成(x.(y…)
(xy…)
- 规则3。在编写cons树时,通常尝试应用规则1和规则2,以尽量减少打印表示中的点数
- 我们从
开始((x)()(y)()
- 我们可以对每一半应用规则1两次,得到
((x)。(y))
- 我们现在可以应用规则2一次,因为顶部对象的右侧是cons,以获得
。这与您希望提供的表示类似((x)y)
()
删除的缩写重新绘制图表(……)
我认为思考这些问题的有效方法是认识到两件事:
- 所有的盒子都是cons单元,也就是成对的
- 有一种略显无用的速记被使用,如果你在没有速记的情况下重新绘制图表,它更容易翻译
()
是唯一的“空框”对象,在Lisp中传统上称为nil
,但在Scheme中没有名称(我认为)作为标准
所以知道了这个速记,你就可以拍下你的照片,这张照片和这张一样
然后把它展开到这个
好了,现在你有了这张展开的图片,你可以简单地写下这张图片的文本表示形式,记住cons单元格的表示形式是(l.r)
,比如说,l
和r
是左右元素,空框对象的表示形式是()
我不打算写下你问题的文本表述,因为我不想做你的家庭作业——我想解释如何做你的家庭作业!——但我会写下这个表述,比如:
好的,按照方框我们得到一个表示,它是
((x . ()) . (y . ())
哎呀,这可不是你需要得到的答案
但一切都没有失去。现在你需要知道最后一件事:有三个特殊的规则适用于打印(或读取)像这样的conses的树(图)
- 规则1.格式为
的cons可以写成(.())
()
- 规则2。右手输入(cdr)本身是cons的cons可以省略点,并将右手cons拼接。因此
可以写成(x.(y…)
(x.(y…)
- 规则3。在编写cons树时,通常尝试应用规则1和规则2,以尽量减少打印表示中的点数
- 我们从
开始((x)()(y)()
- 我们可以对每一半应用规则1两次,得到
((x)。(y))
- 我们现在可以应用规则2一次,
(a b c x d)
(c . ((b . (x . ())) . (d . (a . ()))))
[ * | * ] ---> B | | v A
( {A} . {B} )
[ * | / ] | | v A
[ A | * ] ---> NIL
(c . { ... }) (c . ( {...} . { ... })) (c . ( {...} . (d . { ... }))) (c . ( {...} . (d . (a . {NIL})))) (c . ( (b . {...}) . (d . (a . {NIL})))) (c . ( (b . (x . {NIL})) . (d . (a . {NIL})))) (c . ( (b . (x . ( ))) . (d . (a . ( )))))
(A B ... . (C ...)) === (A B ... C ...) ;; NB nothing after (C ...)!
(c . ( (b . (x . ( ))) . (d . (a . ( ))))) (c . ( (b . (x )) . (d . (a . ( ))))) (c . ( (b . (x )) . (d . (a )))) (c . ( (b . (x )) . (d a ))) (c . ( (b x ) . (d a ))) (c . ( (b x ) d a ))
(c . ( (b . (x . ( ))) . (d . (a . ( ))))) (c (b . (x . ( ))) . (d . (a . ( ))) ) (c (b . (x . ( ))) d . (a . ( )) ) (c (b . (x . ( ))) d a . ( ) ) (c (b . (x )) d a )