大家好,我死了,我是liang tang。这篇文章在公共帐户中开始
我们继续参加肝脏伯克利CS61A的计划项目。这是该项目的第三部分。
课程
项目原始文档
github
在上一篇文章中,我们进一步改善了方案解释器的功能,以便它可以支持许多函数,例如自定义功能。在本文中,我们必须继续改进功能,以便我们的解释器可以支持更多的语法。
整个项目已经完成了项目的基本核心部分,我们必须处理一些特殊类型。
我们也有很多语法,例如逻辑运算符,这些表达式非常频繁且重要。
在方案中,仅是假货,所有其他值都将被视为正确,包括0,您可以使用文件中的函数来确定值是还是。
注意:在方案传统中使用它来代表和代表。在我们的口译员中,他们被认为是等效的。但是,在解锁测试数据时,您需要使用它,并且
我们提供语句和功能的实现作为参考。确保您已经了解了句子的原理,然后执行以下主题。
实施和功能以完成和表达支持。
对于语句,您需要表达从左到右的所有表达式,如果结果为,则返回。否则,返回最后一个子统计的结果。如果输入语句为空,则也返回。
对于语句,我们还需要评估从左到右的每个子语的值。如果子陈述的结果是直接返回。否则,返回。如果输入为空,则它也会返回。
在开发之前,请回答以解锁测试的问题:
开发后,测试:
这两个功能的逻辑并不复杂,递归很容易获得。
改进功能,以便他可以返回第一个子端的值,如果是所有,则返回语句的值。
但是,有一些特殊情况:
您的代码需要能够传递以下测试数据:
如果该声明没有分支机构和语句,请返回
编码之前,回答问题解锁测试:
编码后,测试:
已经设置了整个函数的答案,该函数在函数内部用于遍历所有表达式,并实现了语句的一部分。
这意味着当前的陈述是否为真,那么返回之后的内容。但是,由于主题,某些情况仅是判断条件,并且没有返回结果。这次,判断条件的结果必须是返回,也就是说,当然,可能有多种表达式。在这种情况下,使用函数的功能将返回最后一个表达式的结果。
如果是错误的,则继续其他条件。
特殊类型,它将在本地绑定符号和价值,但是这种绑定只会生效,例如此示例:
在该语句中,绑定中使用的X是全局值,它是5,而不是仅绑定的42。Python代码:
使用实施方法,它返回了当前的孩子。在此中,符号与相应的值绑定。Scheme列表包含一系列对,每个对都包含一个符号和相应的表达式。
您可以使用以下功能:
在鳕鱼之前,回答问题解锁测试样本:
编码后,测试:
只要答案是由该声明做出的,评估完成后就首先绑定。
但是作弊是原始文本并未清楚地指出这一点。这是针对我们自己的问题和一些描述,可以根据老师的问题进行分析和推理。因此,当我当时做这个问题时,我仍然花了一些曲折。
实施功能以评估特殊类型不是标准方案表达式类型。
该表达式类似于表达式,但区别在于,当评估语句时,它是动态范围。表达式为静态范围,因为当执行表达式时,创建了表达式。表达式的使用是动态的。
该表达式通过课程实现,并且大多数代码已经开发。
改进类,当它被调用时,它取决于动态的外部,这就是为什么不需要将实例存储在类别中的原因。
以下是表达式的示例:
在编码之前,回答问题以确保正确理解:
编码完成后,测试:
回答我们查看表达式的使用。实际上,它与语法相同。因此,逻辑是相同的。
唯一的区别是它是静态的,但动态的。
这似乎很复杂,但是如果您考虑一下,您会发现两者之间的区别实际上很小。创建孩子时只有一些差异。表达式的表达在他们自己的情况下使用。这可以确保无论何时运行,都可以在创建时使用。
它是动态的。从班级的定义来看,我们还可以看到它没有这种实例属性。然后,当我们创建一个孩子时,我们没有存储自己,而是外部世界。在运行时依赖外部变量是动态的。
只有一行代码,但是不容易知道内部的逻辑。
此时,整个方案解释器已完成。
但是,除了支持对方案代码执行的解释外,实际上还有许多其他内容。在其他问题中,老师给我们留下了两个非常困难的问题:递归和递归操作优化。
这部分的这一部分更加困难,并且参与了更多的知识。因此,我们已经在随后的文章中与您分开并与您共享。
原始:https://juejin.cn/post/7095991018645880840