Challenge 2: = Links, == Doesn't — Possible Solution ==================================================================== SWI-Prolog session: ?- X = Y. X = Y. ?- X == Y. false. (Run as two separate, independent queries -- each starts with fresh, unbound X and Y.) Explanation: `X = Y` performs unification between two unbound variables, which succeeds by LINKING them together -- from that point on, binding either one would bind the other too. `X == Y`, run as a completely separate query with its own fresh X and Y, checks whether the two terms are ALREADY structurally identical, with no unification happening at all. Two distinct, unbound variables are NOT identical to each other just because they're both unbound -- they're still two genuinely separate variables, so == correctly reports false. The key distinction: = actively changes the state of the variables (linking them); == only inspects their current state, changing nothing. WHY THIS WORKS AS AN ANSWER ------------------------------ This runs = and == as two separate queries on fresh unbound variables, producing the exact different results the chapter describes, and the explanation correctly identifies that = has a real side effect (linking) while == has none.