Article View: comp.lang.prolog
Article #3485Need style advice
From: stuart
Date: Fri, 15 Jul 1988 03:16
Date: Fri, 15 Jul 1988 03:16
38 lines
1822 bytes
1822 bytes
From: stuart
I'd like some advice about how to clean up a relation.
foo_value/2 is intended to be a proper, single-valued, function.
Several clauses can be satisfied at the same time, so I'm depending on
the lexical ordering of clauses and the use of cut to give the proper
precedence among multiple satisfiable clauses and enforce a single
value.
foo_value(X, value_1) :- forced_to_be_1(X), !.
foo_value(X, value_2) :- relation_one(X, Y), not(forced_to_be_1(Y)), !.
foo_value(X, value_2) :- relation_two(X, Y), foo_value(Y, value_2), !.
foo_value(X, value_1) :- relation_one(X, Y), forced_to_be_1(Y), !.
foo_value(X, value_1) :- relation_two(X, Y), foo_value(Y, value_1), !.
foo_value(X, value_3).
Is there a better way to get the same effect? "Better" can mean
more efficient, more aesthetic, closer to purely logical, fewer uses
of cut and not, or whatever metric experienced Prolog users use. :-)
Some other notes:
relation_two/2 contains no cycles. (It is neither reflexive
nor symmetric, nor are there any longer sequences XrY YrZ ... WrX.)
forced_to_be_1/1 is a collection of ground literals.
relation_one/2 and relation_two/2 can satisfy multiple second
arguments for a fully instantiated first argument.
It would be nice, but not essential, if both arguments could be
given as unbound variables. Normally, I try to satisfy
foo_value(literal, V).
Stu Friedberg stuart@cs.rochester.edu {ames,cmcl2,rutgers}!rochester!stuart
Technical Details
Message-ID:
<1988Jul14.231619.22145@cs.rochester.edu>Path:
arc1-ca.pugleaf.net!utzoo!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!cornell!rochester!daemonShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!cornell!rochester!daemon From: stuart Newsgroups: comp.lang.prolog Subject: Need style advice Message-ID: <1988Jul14.231619.22145@cs.rochester.edu> Date: 15 Jul 88 03:16:19 GMT Organization: U of Rochester, CS Dept, Rochester, NY Lines: 37