Path: utzoo!mnetor!uunet!mcvax!enea!ttds!draken!kth!sics!alf From: alf@sics.se (Thomas Sj|land) Newsgroups: comp.lang.prolog Subject: Re: theorem prover of R. Overbeek (Destructive list predicates) Message-ID: <1803@sics.se> Date: 10 Mar 88 17:28:21 GMT References: <710@cresswell.quintus.UUCP> <1048@hubcap.UUCP> <1798@sics.se> Reply-To: alf@sics.se (Thomas Sj|land) Organization: Swedish Institute of Computer Science, Kista Lines: 19 The ending point of Seif's message "without changing the semantics of your program" should be read "without changing the semantics of your algorithm" to make sense, I guess. I (and also Seif, implicitly) mentioned the possibility to "implement" setarg/3 using var/1 and !/0. Perhaps it should be clarified that what is meant is that you can represent a variable that you wish to modify during the execution as a partially instantiated structure (an open list containing all values assigned to the variable). This is not exactly an "implementation" since you cannot unify two "variables" represented in this way if they do not share the same instantiation history, but it is a practical programming technique, that is appropriate in many situations, if you do not wish to use setarg/3. The efficiency problem mentioned by Seif should be obvious from this. The semantic problems seem to be similar to those introduced by viewing i.e. [1.2.3|X]-X as the same d-list regardless of what X is bound to. In both cases you READ your program in a particular way, and JUSTIFY your statement about equality of "the semantics" by some more or less well-specified METHODOLOGY for implementing a given algorithm.