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

"Richard O'Keefe" <[email protected]> Sat, 24 Aug 2024 17:56:14 +1200
Newsgroups gmane.comp.lang.mercury.general
Message-ID <CABcYAdL5p103NTk_hkxaBxeLbUu_=kR1RJEX6Wm9dEqq7rjdmQ@mail.gmail.com>
Does
 :- import_module string.
...
    compare(>, S1, S2)

work for you?

On Sat, 24 Aug 2024 at 02:53, Sean Charles (emacstheviking)
<[email protected]> wrote:
>
>
> % 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
_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users