繁体   English   中英

方案(检查列表,数字和符号的相等性)

[英]Scheme (Checking equality for lists, numbers and symbols)

我是该计划的一个相对较新的用户,并且正在尝试制作一个能够检查数字,符号和列表(包括嵌套列表)是否相等的功能。 我已经尝试了以下代码的多种变体,但无法提出可行的解决方案; 主要问题是遇到嵌套列表后,如果原始列表中有更多元素,程序将无法继续执行该操作,而且我不确定如何使该函数适用于列表和数字/符号。 任何帮助表示赞赏。

注意,我使用的是Scheme中的R5RS语言,据我了解,这限制了该语言的功能。

(define (my-equal? a b)
  (cond ((null? a))
        ((list? (car a))(my-equal? (car a)(car b)))
        ((equal? (car a)(car b))
         (my-equal? (cdr a)(cdr b)))
        (else #f)))

我不确定这是否是“我只想自己实现”的问题,但是在R5RS标准中,文档是否equal? 状态:

等于? 应用eqv递归比较对,向量和字符串的内容? 在其他对象上,例如数字和符号。 根据经验,物体通常是相等的吗? 如果它们打印相同。 等于? 如果其参数为循环数据结构,则可能无法终止。

所以... equal? 已经处理嵌套列表,向量等的递归检查。

再说一次,如果您只是对如何实现这样的东西感兴趣,那就不要让我阻止您!

如果a满足null? ,您不会明确返回任何内容。 但是正确的答案是什么? 如果在这种情况下,您拥有(null? b) ,则等式成立。

接下来,你认为你可以把cara和测试针对list? 谓语。 其实,你首先要检查的是a本身就是为了一个列表被允许访问的第一个元素。

在接下来的所有子句中,您将操纵输入的carcdr ,而不是直接使用ab 当你需要使用它们的唯一情况是,当你确保两个 ab是列表:那么,他们是平等的,如果他们的car都是平等的,他们的cdr太。

其他情况不能假定值是列表。 相反,何时list? 如果cond失败,则确保您正在处理另一种输入。 您不能在以下行中调用(car a) ,而不会发生错误。

然后,如果ab都是数字,字符串或其他类型,则必须提供其他比较方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM