DIRECTORY Atom; Asserting: CEDAR DEFINITIONS = { Error: ERROR [a: Assertion]; Warning: SIGNAL [a: Assertion]; Assertions: TYPE = Atom.PropList; Assertion: TYPE = Atom.DottedPair; Term: TYPE = REF ANY; Terms: TYPE = LIST OF Term; Cons: PROC [reln: Term, terms: Terms] RETURNS [Assertion]; RelnOf: PROC [a: Assertion] RETURNS [Term]; TermsOf: PROC [a: Assertion] RETURNS [Terms]; ToAssertion: PROC [terms: Terms] RETURNS [Assertion]; ToAssertions: PROC [terms: Terms] RETURNS [Assertions]; Assert: PROC [reln: Term, terms: Terms, inAdditionTo: Assertions] RETURNS [allTogetherNow: Assertions]; Test: PROC [reln: Term, terms: Terms, in: Assertions] RETURNS [BOOL]; Filter: PROC [reln: Term, from: Assertions, mayMute: BOOL _ FALSE] RETURNS [about, notAbout: Assertions]; EnumerateAssertionsAbout: PROC [reln: Term, from: Assertions, to: AssertionConsumer]; AssertionConsumer: TYPE = PROC [assertion: Assertion]; AssertFn: PROC [fn: Term, terms: Terms, inAdditionTo: Assertions, numArgs: INT _ 0, mayMute: BOOL _ FALSE] RETURNS [allTogetherNow: Assertions]; AssertFn1: PROC [fn, val: Term, inAdditionTo: Assertions, args: Terms _ NIL, mayMute: BOOL _ FALSE] RETURNS [allTogetherNow: Assertions]; FnVals: PROC [fn: Term, from: Assertions, args: Terms _ NIL] RETURNS [vals: Terms]; FnVal: PROC [fn: Term, from: Assertions, args: Terms _ NIL] RETURNS [val: Term]; CheckFn: PROC [fn: Term, in: Assertions, args: Terms _ NIL]; Union: PROC [a, b: Assertions] RETURNS [c: Assertions]; Equal: PROC [a, b: Term] RETURNS [BOOL]; }. nAsserting.Mesa Copyright c1984 Xerox Corporation. All rights reserved. Last Edited by: Spreitzer, May 1, 1985 10:05:02 pm PDT Wherein we try to deal with something like mathematical relations, which are tuples of terms. There are also some procedures to deal with the special case of functions, which are relations where no two tuples have the same initial k terms, for some k constant over the function. The types we use to represent assertions (tuples) and lists thereof are borrowed from the old property lists, so this good new information can be put in crufty old slots. DO NOT mix Asserting and property list operations on the same reln/fn / key/property --- property lists like to think there is only one value to a property, whereas relations can have more than one tuple. "understood": ATOM, ROPE, REF BOOL, REF INT, REF REAL, REF PROC ANY RETURNS ANY, Terms Κi– "cedar" style˜Icode™Kšœ Οmœ-™8J™6K˜KšΟk œ˜K˜šΠbx œžœž œ˜ K˜Ibody™—Lšœ¬ΟbœΖ™ψK˜KšΠblœžœ˜K˜Kš‘œžœ˜K˜Kšœ žœ˜!Kšœ žœ˜"šœžœžœžœ˜KšœV™V—K˜Kšœžœžœžœ˜K˜KšΟnœžœžœ ˜:Kš’œžœžœ˜+Kš’œžœžœ ˜-K˜Kš’ œžœžœ ˜5Kš’ œžœžœ˜7K˜Kš’œžœ6žœ˜gKš’œžœ,žœžœ˜EK˜Kš ’œžœ)žœžœžœ˜iK˜š’œžœ7˜UK˜Kš’œžœžœ˜6—K˜Kš ’œžœ=žœžœžœžœ˜K˜Kš ’ œžœ9žœ žœžœžœ˜‰K˜Kš’œžœ,žœžœ˜SK˜Kš’œžœ,žœžœ ˜PK˜Kš’œžœ*žœ˜