Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!linus!philabs!cmcl2!seismo!mcvax!ukc!cstvax!hwcs!aimmi!gilbert From: gilbert@aimmi.UUCP (Gilbert Cockton) Newsgroups: net.lang.prolog Subject: Re: Standard behavior? Message-ID: <768@aimmi.UUCP> Date: Mon, 9-Jun-86 09:39:34 EDT Article-I.D.: aimmi.768 Posted: Mon Jun 9 09:39:34 1986 Date-Received: Sat, 14-Jun-86 06:48:33 EDT References: <6500005@uicsl> <29700028@uiucdcs> Reply-To: gilbert@aimmi.UUCP (Gilbert Cockton) Organization: Heriot-Watt/Strathclyde Alvey MMI Unit, Scotland Lines: 24 In article <29700028@uiucdcs> reddy@uiucdcs.UUCP writes: > >To rggoebel@watdragon: > >You can try explaining cut, var and nonvar logically. If you do it >successfully, you could become a star of the logic programming community. In all humility, and with a strong chance of getting it all wrong here I go: var(X) = All t in Term: can_unify(t,X) where can_unify is true if a most general unifier can be found for both its arguments. nonvar(X) = Exists t in Term: NOT(can_unify(t,X)) Dirty structures like lists with uninstantiated tails (as in the unit time queue trick) are nonvar under these definitions. I've had minimal training in Logic, so I don't know if the set of all Terms is an ok construct. Seems ok to me. This leaves cut, which is definitely meta-logical.