【发布时间】:2017-03-30 01:03:53
【问题描述】:
var ones = [1];
ones[1] = ones;
ones;
// => [1, [1, [1, [1, [1, ...]]]]]
var ones_ = [1];
ones_[1] = ones_;
ones_;
// => [1, [1, [1, [1, [1, ...]]]]]
如何确定ones 和ones_ 相等?是否有处理上述循环结构的算法?
【问题讨论】:
-
澄清一下,您是否也希望将对象
var foo = [1]; foo[1] = [1, foo];视为与上述对象相同? -
正确。恰好与值关联的标识符是不相关的。
-
我误读了您的评论,@IlmariKaronen。我现在明白了你问的问题,即递归开始的深度是否重要。我不认为这很重要。表示值
[1, [1, [1, [1, [1, ...]]]]]的两个对象应该被认为是相等的,即使它们的结构不相同。 -
我想说递归类型和包装值的类型都必须是 setoids,此外,递归类型必须是可折叠的。 “圆形”到底是什么意思?您只需在示例中显示一个链接列表。
标签: javascript functional-programming equality