<div dir="ltr"><div>So I am trying to understand the following code. How is X = A + B searched for? So A + B has to add up to X, which is passed to the function, but there is no explanation of how Mercury discovers these variables that add up to X.</div><div><br></div><div>Also, should I read a Prolog book to have a better grasp of Mercury?<br></div><div><br><div style="font-size:13.641px;font-family:monospace">:- module fib.</div><div style="font-size:13.641px;font-family:monospace">:- interface.</div><div style="font-size:13.641px;font-family:monospace">:- import_module io.</div><div style="font-size:13.641px;font-family:monospace">:- pred main(io::di, io::uo) is det</div><div style="font-size:13.641px;font-family:monospace">.</div><div style="font-size:13.641px;font-family:monospace">:- implementation.</div><div style="font-size:13.641px;font-family:monospace">:- import_module int.</div><div style="font-size:13.641px;font-family:monospace">:- pred fib(int::in, int::out) is det.</div><div style="font-size:13.641px;font-family:monospace"><br></div><div style="font-size:13.641px;font-family:monospace">fib(N, X) :-</div><div style="font-size:13.641px;font-family:monospace">(  if      N =< 2</div><div style="font-size:13.641px;font-family:monospace">  then  X = 1</div><div style="font-size:13.641px;font-family:monospace">  else  fib(N - 1, A), fib(N - 2, B), X = A + B</div><div style="font-size:13.641px;font-family:monospace">).</div><div style="font-size:13.641px;font-family:monospace">main(!IO) :-</div><div style="font-size:13.641px;font-family:monospace">   fib(17, X),</div><div style="font-size:13.641px;font-family:monospace">   io.write_string("fib(17, ", !IO),</div><div style="font-size:13.641px;font-family:monospace">   io.write_int(X, !IO),</div><div style="font-size:13.641px;font-family:monospace">   io.write_string(")\n", !IO).</div></div></div>