简体   繁体   中英

A union of a conditions

i'm pretty new to prolog and now only the very basics and i ran into a problem

i need to write a statement line this: <cond.1> and (<cond.2> or <cond.3>)

in languages like c++ it would look something like this:

if(<cond.1> && (<cond.2> || <cond.3>)) { /*...*/ }

And i tried this in prolog:

statement(X, Y, Z, W):-condition(X,Y,Z,W), !, X <> Z or Y <> W.

And this

statement(X, Y, Z, W):-condition(X,Y,Z,W) and (X <> Z or Y <> W).

And more things that google told me. Nothing worked, and i know that this logical statement would look like this in expanded form: <cond.1> and <cond.2> or <cond.1> and <cond.3>

But this is creates a frick ton of code and makes it unreadable. i just feel there has to be a way to implement these conditions inside a parentheses. But i just dont know how and i can't find any way to do it.

The "logical or" is denoted with a semicolon ( ; ). So your predicate would likely look like:

statement(X, Y, Z, W) :-
    condition(X,Y,Z,W),
    (X \= Z Y \= W).

Here the \\=/2 predicate [swi-doc] succeeds if it can not unify X with Z (or Y with W ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM