Here is a quick sketch of a catalogue:
1) No Logical Variables:
It is not only that logical variables from logic programming
languages are more flexible in that they provide two sided unification,
they also are objects in itself which might transpire from within a
rule to within some output. Something that functional programming
languages cannot do, and a language that has mixed subsumes_term/2
and (=)/2 cannot prevent.
Check this Picat code:
fresh(X) => X=_.
And then these Picat queries:
Picat> fresh(X).
yes
Picat> fresh(X), fresh(Y), X==Y.
no
2) Datatypes with Equality:
Further functional programming languages see (=)/2 totally different
than logic programming languages. The notion of a linear pattern is well
established in functional programming languages. And non-linear patterns
are resolved with (==)/2 instead of (=)/2. And the (==)/2 is only needed for
ground terms, since there are no logical variables in functional programming.
See also:
Example forbidden code (which I would like to be able to write):
isWaiting x (Push x y p) = True
....
The same logic, but working variant:
isWaiting x (Push z y p) = if x == z then True
Why do Haskell patterns have to be linear?
https://stackoverflow.com/q/56002197/502187
3) Return Values
We do not find the use of (=)/2 in functional programming languages
to return a value in some argument. Since functional programming
languages do not have logical variables we cannot return something in
an argument. But functional programming languages are programming
units are functions, and we can return function values or use a tuple
result for multiple simultaneously values.
4) Let
We do not find the use of (=)/2 in functional programming languages
to assign some local value. Since functional programming languages
do not have logical variables, the idiom of using (=)/2 to have a local
variable H and give it some value H = ... has no equivalent. The let construct
in functional programming languages has a totally different pedigree. It
mainly comes from lambda calculus, and H=E;S is a shorthand for (λH.S)E.