[m-users.] String comparison when compiling to C

"Sean Charles (emacstheviking)" <[email protected]> Fri, 23 Aug 2024 12:15:24 +0100
Newsgroups gmane.comp.lang.mercury.general
Message-ID <[email protected]>
% The builtin comparison operation on strings is also implementation
% dependent. The current implementation performs string comparison using
%
% - C's strcmp() function, when compiling to C;

Guided by the text, "The builtin comparison operation on strings "... I assumed that >, <, >= etc would work fork string types but my code:

    615 op_greater_than(!Mode, !Stk) :-
    616     ( if [ V1, V2 | Rest ] = !.Stk then
    617         !:Stk = Rest,
    618
    619         ( if V1 = int(N1), V2 = int(N2) then
    620             trace [io(!IO)] (
    621                 io.format("> %s %s\n", [s(string(V1)),s(string(V2))],!IO)
    622             ),
    623             ( if N1 > N2
    624             then push_true(!Mode, !Stk)
    625             else push_false(!Mode, !Stk)
    626             )
    627
    628         else if V1 = str(S1), V2 = str(S2) then
    629             trace [io(!IO)] (
    630                 io.format("> %s %s\n", [s(string(V1)),s(string(V2))],!IO)
    631             ),
    632             ( if S1 > S2
    633             then push_true(!Mode, !Stk)
    634             else push_false(!Mode, !Stk)
    635             )
    636         else
    637             seterr("> requires two objects of the same type.", !Mode)

gets these errors:

dstack.m:632: In clause for predicate `op_greater_than'/4:
dstack.m:632:   in call to predicate `int.>'/2:
dstack.m:632:   in argument 1:
dstack.m:632:     variable `S1' has type
dstack.m:632:       string,
dstack.m:632:     expected type was
dstack.m:632:       int;
dstack.m:632:   in argument 2:
dstack.m:632:     variable `S2' has type
dstack.m:632:       string,
dstack.m:632:     expected type was
dstack.m:632:       int.


So what is the 'way' to do string comparisons? I find it odd in all the code I've written, I have never needed to do this before!

Thanks,
Sean.

_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users