Same fringe: Difference between revisions
Content added Content deleted
m (Added the Sidef language) |
|||
Line 2,172: | Line 2,172: | ||
<pre>> (same-fringe? (list 1 '() (list 2 '() (list 3 '() '()))) (list 3 (list 2 (list 1 '() '()) '()) '())) |
<pre>> (same-fringe? (list 1 '() (list 2 '() (list 3 '() '()))) (list 3 (list 2 (list 1 '() '()) '()) '())) |
||
#t</pre> |
#t</pre> |
||
=={{header|Sidef}}== |
|||
{{trans|Perl}} |
|||
<lang ruby>var trees = [ |
|||
# 0..2 are same |
|||
[ 'd', [ 'c', [ 'a', 'b', ], ], ], |
|||
[ [ 'd', 'c' ], [ 'a', 'b' ] ], |
|||
[ [ [ 'd', 'c', ], 'a', ], 'b', ], |
|||
# and this one's different! |
|||
[ [ [ [ [ [ 'a' ], 'b' ], 'c', ], 'd', ], 'e', ], 'f' ], |
|||
]; |
|||
func get_tree_iterator(*rtrees) { |
|||
var tree; |
|||
closure { |
|||
tree = rtrees.pop; |
|||
while (tree.is_an(Array)) { |
|||
rtrees.append(tree[1]); |
|||
tree = tree[0]; |
|||
}; |
|||
return tree; |
|||
} |
|||
} |
|||
func cmp_fringe(a, b) { |
|||
var ti1 = get_tree_iterator(a); |
|||
var ti2 = get_tree_iterator(b); |
|||
loop { |
|||
var (L, R) = (ti1(), ti2()); |
|||
all { L != nil; R != nil; L == R } && next; |
|||
all { L == nil; R == nil } && return "Same"; |
|||
return "Different"; |
|||
} |
|||
} |
|||
range(1, trees.end).each { |tree_idx| |
|||
say ("tree[#{tree_idx-1}] vs tree[#{tree_idx}]: ", |
|||
cmp_fringe(trees[tree_idx-1], trees[tree_idx])); |
|||
};</lang> |
|||
{{out}} |
|||
<pre> |
|||
tree[0] vs tree[1]: Same |
|||
tree[1] vs tree[2]: Same |
|||
tree[2] vs tree[3]: Different |
|||
</pre> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |