Summary
###########################################################################
File: equiv.icn
Subject: Procedure to compare structures
Author: Ralph E. Griswold
Date: February 20, 1996
Updated: Bruce Rennie
Date: November 05, 2020
###########################################################################
This file is in the public domain.
###########################################################################
equiv(s,y) compare arbitrary structures x and y
###########################################################################
The procedure equiv() tests for the "equivalence" of two values. For types
other than structures, it does the same thing as x1 === x2. For structures,
the test is for "shape". For example,
equiv([],[])
succeeds.
It handles loops, but does not recognize them as such. For example,
given
L1 := []
L2 := []
put(L1,L1)
put(L2,L1)
equiv(L1,L2)
succeeds.
The concept of equivalence for tables and sets is not quite right
if their elements are themselves structures. The problem is that there
is no concept of order for tables and sets, yet it is impractical to
test for equivalence of their elements without imposing an order. Since
structures sort by "age", there may be a mismatch between equivalent
structures in two tables or sets.
Now checks if image(procedure|file|window) is identical. If so then
succeeds, otherwise assumes any differences means that they are not
equivalent.
Note:
The procedures equiv and ldag have a trailing argument that is used on
internal recursive calls; a second argument must not be supplied
by the user.
###########################################################################
Procedures:
equiv
This file is part of the (main) package.
Source code.
equiv(x1, x2, done)
: compare values for equivalence
This page produced by UniDoc on 2021/04/15 @ 23:59:54.