File equiv.icn

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.

Details
Procedures:

equiv(x1, x2, done)

: compare values for equivalence



This page produced by UniDoc on 2021/04/15 @ 23:59:54.