[m-users.] String comparison when compiling to C
Sean Charles (emacstheviking)
objitsu at gmail.com
Fri Aug 23 21:15:24 AEST 2024
% 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20240823/c3ba0208/attachment.html>
More information about the users
mailing list