Если бы я реализовал процесс lequal
, я бы начал с этого:
proc lequal {l1 l2} {
foreach elem $l1 {
if {$elem ni $l2} {return false}
}
foreach elem $l2 {
if {$elem ni $l1} {return false}
}
return true
}
, а затем оптимизировал бы его до:
proc K {a b} {return $a}
proc lequal {l1 l2} {
if {[llength $l1] != [llength $l2]} {
return false
}
set l2 [lsort $l2]
foreach elem $l1 {
set idx [lsearch -exact -sorted $l2 $elem]
if {$idx == -1} {
return false
} else {
set l2 [lreplace [K $l2 [unset l2]] $idx $idx]
}
}
return [expr {[llength $l2] == 0}]
}