Order two numerical lists: Difference between revisions

m
No edit summary
 
(38 intermediate revisions by 25 users not shown)
Line 1:
{{task|Sorting Algorithms}}
{{Category:Sorting}}
{{Sorting Algorithm}}
 
Write a function that orders two lists or arrays filled with numbers.
Line 10 ⟶ 12:
 
<small>Note: further clarification of lexicographical ordering is expounded on the talk page [[Talk:Order_two_numerical_lists#Lexicographic_order|here]] and [[Talk:Order_two_numerical_lists#Is_the_task_statement_consistent.3F|here]].</small>
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<syntaxhighlight lang="11l">[1,2,1,3,2] < [1,2,0,4,4,0,0,0]</syntaxhighlight>
 
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program orderlist64.s */
 
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
 
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessResult1: .asciz "List1 < List2 \n" // message result
szMessResult2: .asciz "List1 => List2 \n" // message result
szCarriageReturn: .asciz "\n"
qTabList1: .quad 1,2,3,4,5
.equ NBELEMENTS1, (. - qTabList1) /8
qTabList2: .quad 1,2,1,5,2,2
.equ NBELEMENTS2, (. - qTabList2) /8
qTabList3: .quad 1,2,3,4,5
.equ NBELEMENTS3, (. - qTabList3) /8
qTabList4: .quad 1,2,3,4,5,6
.equ NBELEMENTS4, (. - qTabList4) /8
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList2
mov x3,NBELEMENTS2
bl listeOrder
cmp x0,0 // false ?
beq 1f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 2f
1:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
2:
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList3
mov x3,NBELEMENTS3
bl listeOrder
cmp x0,0 // false ?
beq 3f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 4f
3:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
4:
ldr x0,qAdriTabList1
mov x1,NBELEMENTS1
ldr x2,qAdriTabList4
mov x3,NBELEMENTS4
bl listeOrder
cmp x0,0 // false ?
beq 5f // yes
ldr x0,qAdrszMessResult1 // list 1 < list 2
bl affichageMess // display message
b 6f
5:
ldr x0,qAdrszMessResult2
bl affichageMess // display message
6:
100: // standard end of the program
mov x0,0 // return code
mov x8,EXIT // request to exit program
svc 0 // perform the system call
qAdriTabList1: .quad qTabList1
qAdriTabList2: .quad qTabList2
qAdriTabList3: .quad qTabList3
qAdriTabList4: .quad qTabList4
qAdrszMessResult1: .quad szMessResult1
qAdrszMessResult2: .quad szMessResult2
qAdrszCarriageReturn: .quad szCarriageReturn
/******************************************************************/
/* liste order */
/******************************************************************/
/* x0 contains the address of list 1 */
/* x1 contains list 1 size */
/* x2 contains the address of list 2 */
/* x3 contains list 2 size */
/* x0 returns 1 if list1 < list2 */
/* x0 returns 0 else */
listeOrder:
stp x1,lr,[sp,-16]! // save registers
stp x2,x3,[sp,-16]! // save registers
cbz x1,99f // list 1 size = zero ?
cbz x3,98f // list 2 size = zero ?
 
mov x4,#0 // index list 1
mov x5,#0 // index list 2
1:
ldr x6,[x0,x4,lsl #3] // load list 1 element
ldr x8,[x2,x5,lsl #3] // load list 2 element
cmp x6,x8 // compar
bgt 4f
beq 2f // list 1 = list 2
add x4,x4,1 // increment index 1
cmp x4,x1 // end list ?
bge 5f
b 1b // else loop
2:
add x4,x4,1 // increment index 1
cmp x4,x1 // end list ?
bge 3f // yes -> verif size
add x5,x5,1 // else increment index 2
cmp x5,x3 // end list 2 ?
bge 4f
b 1b // else loop
3:
cmp x1,x3 // compar size
bge 4f // list 2 < list 1
blt 5f // list 1 < list 2
b 100f
4:
mov x0,#0 // list 1 > list 2
b 100f
5:
mov x0,#1 // list 1 < list 2
b 100f
98: // error
mov x0,-2
b 100f
99: // error
mov x0,-1
100:
ldp x2,x3,[sp],16 // restaur 2 registers
ldp x1,lr,[sp],16 // restaur 2 registers
ret // return to address lr x30
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
 
</syntaxhighlight>
 
=={{header|ACL2}}==
Line 19 ⟶ 182:
ACL2 !>(lexorder '(1 2 4) '(1 2 3))
NIL</pre>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">INT FUNC Compare(INT ARRAY x INT xLen INT ARRAY y INT yLen)
INT i,len
 
len=xLen
IF len>yLen THEN
len=yLen
FI
FOR i=0 TO len-1
DO
IF x(i)>y(i) THEN
RETURN (1)
ELSEIF x(i)<y(i) THEN
RETURN (-1)
FI
OD
IF xLen>yLen THEN
RETURN (1)
ELSEIF xLen<yLen THEN
RETURN (-1)
FI
RETURN (0)
 
BYTE FUNC Less(INT ARRAY x INT xLen INT ARRAY y INT yLen)
IF Compare(x,xLen,y,yLen)<0 THEN
RETURN (1)
FI
RETURN (0)
 
PROC PrintArray(INT ARRAY x INT len)
INT i
 
Put('[)
FOR i=0 TO len-1
DO
PrintI(x(i))
IF i<len-1 THEN
Put(' )
FI
OD
Put('])
RETURN
 
PROC Test(INT ARRAY x INT xLen INT ARRAY y INT yLen)
PrintArray(x,xLen)
IF Less(x,xLen,y,yLen) THEN
Print(" < ")
ELSE
Print(" >= ")
FI
PrintArray(y,yLen) PutE()
RETURN
 
PROC Main()
INT ARRAY a=[1 2 1 5 2]
INT ARRAY b=[1 2 1 5 2 2]
INT ARRAY c=[1 2 3 4 5]
INT ARRAY d=[1 2 3 4 5]
Test(a,5,b,6)
Test(b,6,a,5)
Test(b,6,c,5)
Test(c,5,b,6)
Test(c,5,d,5)
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Order_two_numerical_lists.png Screenshot from Atari 8-bit computer]
<pre>
[1 2 1 5 2] < [1 2 1 5 2 2]
[1 2 1 5 2 2] >= [1 2 1 5 2]
[1 2 1 5 2 2] < [1 2 3 4 5]
[1 2 3 4 5] >= [1 2 1 5 2 2]
[1 2 3 4 5] >= [1 2 3 4 5]
</pre>
 
=={{header|Ada}}==
Line 24 ⟶ 262:
This also includes arrays of user defined types, using the type definition order from smallest to largest.
Demonstrated in the program below:
<syntaxhighlight lang="ada">
<lang Ada>
with Ada.Text_IO; use Ada.Text_IO;
procedure Order is
Line 47 ⟶ 285:
Put_Line (Boolean'Image (List6 > List7)); -- True
end Order;
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 57 ⟶ 295:
</pre>
 
=={{header|ALGOL 68}}==
<syntaxhighlight lang="algol68">BEGIN # compare lists (rows) of integers #
# returns TRUE if there is an element in a that is < the corresponding #
# element in b and all previous elements are equal; FALSE otherwise #
OP < = ( []INT a, b )BOOL:
IF INT a pos := LWB a;
INT b pos := LWB b;
BOOL equal := TRUE;
WHILE a pos <= UPB a AND b pos <= UPB b AND equal DO
equal := a[ a pos ] = b[ b pos ];
IF equal THEN
a pos +:= 1;
b pos +:= 1
FI
OD;
NOT equal
THEN
# there is an element in a and b that is not equal #
a[ a pos ] < b[ b pos ]
ELSE
# all elements are equal or one list is shorter #
# a is < b if a has fewer elements #
a pos > UPB a AND b pos <= UPB b
FI # < # ;
 
# tests a < b has the expected result #
PROC test = ( STRING a name, []INT a, STRING b name, []INT b, BOOL expected )VOID:
BEGIN
BOOL result = a < b;
print( ( a name, IF result THEN " < " ELSE " >= " FI, b name
, IF result = expected THEN "" ELSE ", NOT as expected" FI
, newline
)
)
END # test # ;
 
# test cases as in the BBC basic sample #
[]INT list1 = ( 1, 2, 1, 5, 2 );
[]INT list2 = ( 1, 2, 1, 5, 2, 2 );
[]INT list3 = ( 1, 2, 3, 4, 5 );
[]INT list4 = ( 1, 2, 3, 4, 5 );
test( "list1", list1, "list2", list2, TRUE );
test( "list2", list2, "list3", list3, TRUE );
test( "list3", list3, "list4", list4, FALSE );
 
# additional test cases #
[]INT list5 = ( 9, 0, 2, 1, 0 );
[]INT list6 = ( 4, 0, 7, 7 );
[]INT list7 = ( 4, 0, 7 );
[]INT list8 = ( );
test( "list5", list5, "list6", list6, FALSE );
test( "list6", list6, "list7", list7, FALSE );
test( "list7", list7, "list8", list8, FALSE );
test( "list8", list8, "list7", list7, TRUE )
 
END</syntaxhighlight>
{{out}}
<pre>
list1 < list2
list2 < list3
list3 >= list4
list5 >= list6
list6 >= list7
list7 >= list8
list8 < list7
</pre>
 
=={{header|ALGOL W}}==
{{Trans|ALGOL 68}}
<syntaxhighlight lang="algolw">begin % compare lists (rows) of integers %
% returns TRUE if there is an element in a that is < the corresponding %
% element in b and all previous elements are equal, FALSE otherwise %
% the bounds of a and b should aLb :: aUb and bLb :: bUb %
logical procedure iLT ( integer array a ( * )
; integer value aLb, aUb
; integer array b ( * )
; integer value bLb, bUb
) ;
begin
integer aPos, bPos;
logical equal;
aPos := aLb;
bPos := bLb;
equal := true;
while aPos <= aUb and bPos <= bUb and equal do begin
equal := a( aPos ) = b( bPos );
if equal then begin
aPos := aPOs + 1;
bPos := bPos + 1
end if_equal
end while_more_elements_and_equal ;
if not equal
then % there is an element in a and b that is not equal %
a( aPos ) < b( bPos )
else % all elements are equal or one list is shorter %
% a is < b if a has fewer elements %
aPos > aUb and bPos <= bUb
end iLT ;
% tests a < b has the expected result %
procedure test ( string(5) value aName
; integer array a ( * )
; integer value aLb, aUb
; string(5) value bName
; integer array b ( * )
; integer value bLb, bUb
; logical value expected
) ;
begin
logical isLt;
isLt := iLT( a, aLb, aUb, b, bLb, bUb );
write( aName, if isLt then " < " else " >= ", bName
, if isLt = expected then "" else ", NOT as expected"
)
end test ;
 
integer array list1, list3, list4 ( 1 :: 5 );
integer array list2 ( 1 :: 6 );
integer array list5 ( 1 :: 5 );
integer array list6 ( 1 :: 4 );
integer array list7 ( 1 :: 3 );
integer array list8 ( 1 :: 1 );
integer aPos;
% test cases as in the BBC basic sample %
aPos := 1; for i := 1, 2, 1, 5, 2 do begin list1( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 1, 5, 2, 2 do begin list2( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list3( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 1, 2, 3, 4, 5 do begin list4( aPos ) := i; aPos := aPos + 1 end;
test( "list1", list1, 1, 5, "list2", list2, 1, 6, true );
test( "list2", list2, 1, 6, "list3", list3, 1, 5, true );
test( "list3", list3, 1, 5, "list4", list4, 1, 5, false );
% additional test cases %
aPos := 1; for i := 9, 0, 2, 1, 0 do begin list5( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 4, 0, 7, 7 do begin list6( aPos ) := i; aPos := aPos + 1 end;
aPos := 1; for i := 4, 0, 7 do begin list7( aPos ) := i; aPos := aPos + 1 end;
test( "list5", list5, 1, 5, "list6", list6, 1, 4, false );
test( "list6", list6, 1, 4, "list7", list7, 1, 3, false );
test( "list7", list7, 1, 3, "list8", list8, 1, 0, false );
test( "list8", list8, 1, 0, "list7", list7, 1, 3, true )
end.</syntaxhighlight>
{{out}}
<pre>
list1 < list2
list2 < list3
list3 >= list4
list5 >= list6
list6 >= list7
list7 >= list8
list8 < list7
</pre>
 
=={{header|Aime}}==
<syntaxhighlight lang="aime">ordl(list a, b)
<lang aime>integer
ordl(list a, list b)
{
integer i, l, o;
Line 75 ⟶ 461:
}
 
return i < l ? o : ~a <= ~b;
}
 
integer
main(void)
{
Line 87 ⟶ 472:
o_(ordl(list(1, 4, 2, 3), list(1, 4, 2.1, 3)), "\n");
 
return 0;
}</langsyntaxhighlight>
 
=={{header|AppleScript}}==
Line 95 ⟶ 480:
 
<= is not defined over lists in AppleScript
<langsyntaxhighlight AppleScriptlang="applescript">-- <= for lists
-- compare :: [a] -> [a] -> Bool
on compare(xs, ys)
Line 138 ⟶ 523:
missing value
end if
end uncons</langsyntaxhighlight>
 
{{Out}}
<syntaxhighlight lang AppleScript="applescript">{false, true}</langsyntaxhighlight>
 
----
Here's an iterative implementation:
 
<syntaxhighlight lang="applescript">on listAComesBeforeListB(a, b)
set aLength to (count a)
set bLength to (count b)
set i to 0
repeat
set i to i + 1
if (i > bLength) then
return false
else if (i > aLength) then
return true
else
set aVal to item i of a
set bVal to item i of b
if (aVal = bVal) then
else
return (bVal > aVal)
end if
end if
end repeat
end listAComesBeforeListB
 
-- Test code:
set a to {}
repeat (random number 10) times
set end of a to random number 10
end repeat
set b to {}
repeat (random number 10) times
set end of b to random number 10
end repeat
 
return {a:a, b:b, | a < b |: listAComesBeforeListB(a, b)},</syntaxhighlight>
 
{{Out}}
Examples:
<syntaxhighlight lang="applescript">{a:{3, 5, 6, 5, 2, 1, 4}, b:{5, 8, 9, 2, 0, 1, 9, 0, 4, 10}, | a < b |:true}
{a:{10, 9, 5, 8, 8, 4, 3}, b:{5, 10, 8, 9, 10, 8, 7, 8}, | a < b |:false}
{a:{0, 10}, b:{0, 10}, | a < b |:false}
{a:{0, 10}, b:{0, 10, 5}, | a < b |:true}</syntaxhighlight>
 
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
/* ARM assembly Raspberry PI */
/* program orderlist.s */
 
/* Constantes */
.equ STDOUT, 1 @ Linux output console
.equ EXIT, 1 @ Linux syscall
.equ WRITE, 4 @ Linux syscall
 
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessResult1: .asciz "List1 < List2 \n" @ message result
szMessResult2: .asciz "List1 => List2 \n" @ message result
szCarriageReturn: .asciz "\n"
 
iTabList1: .int 1,2,3,4,5
.equ NBELEMENTS1, (. - iTabList1) /4
iTabList2: .int 1,2,1,5,2,2
.equ NBELEMENTS2, (. - iTabList2) /4
iTabList3: .int 1,2,3,4,5
.equ NBELEMENTS3, (. - iTabList3) /4
iTabList4: .int 1,2,3,4,5,6
.equ NBELEMENTS4, (. - iTabList4) /4
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: @ entry of program
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList2
mov r3,#NBELEMENTS2
bl listeOrder
cmp r0,#0 @ false ?
beq 1f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 2f
1:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
 
2:
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList3
mov r3,#NBELEMENTS3
bl listeOrder
cmp r0,#0 @ false ?
beq 3f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 4f
3:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
4:
ldr r0,iAdriTabList1
mov r1,#NBELEMENTS1
ldr r2,iAdriTabList4
mov r3,#NBELEMENTS4
bl listeOrder
cmp r0,#0 @ false ?
beq 5f @ yes
ldr r0,iAdrszMessResult1 @ list 1 < list 2
bl affichageMess @ display message
b 6f
5:
ldr r0,iAdrszMessResult2
bl affichageMess @ display message
6:
100: @ standard end of the program
mov r0, #0 @ return code
mov r7, #EXIT @ request to exit program
svc #0 @ perform the system call
iAdriTabList1: .int iTabList1
iAdriTabList2: .int iTabList2
iAdriTabList3: .int iTabList3
iAdriTabList4: .int iTabList4
iAdrszMessResult1: .int szMessResult1
iAdrszMessResult2: .int szMessResult2
iAdrszCarriageReturn: .int szCarriageReturn
/******************************************************************/
/* display text with size calculation */
/******************************************************************/
/* r0 contains the address of list 1 */
/* r1 contains list 1 size */
/* r2 contains the address of list 2 */
/* r3 contains list 2 size */
/* r0 returns 1 if list1 < list2 */
/* r0 returns 0 else */
listeOrder:
push {r1-r7,lr} @ save registres
cmp r1,#0 @ list 1 size = zero ?
moveq r0,#-1 @ yes -> error
beq 100f
cmp r3,#0 @ list 2 size = zero ?
moveq r0,#-2 @ yes -> error
beq 100f
mov r4,#0 @ index list 1
mov r5,#0 @ index list 2
1:
ldr r6,[r0,r4,lsl #2] @ load list 1 element
ldr r7,[r2,r5,lsl #2] @ load list 2 element
cmp r6,r7 @ compar
movgt r0,#0 @ list 1 > list 2 ?
bgt 100f
beq 2f @ list 1 = list 2
add r4,#1 @ increment index 1
cmp r4,r1 @ end list ?
movge r0,#1 @ yes -> ok list 1 < list 2
bge 100f
b 1b @ else loop
2:
add r4,#1 @ increment index 1
cmp r4,r1 @ end list ?
bge 3f @ yes -> verif size
add r5,#1 @ else increment index 2
cmp r5,r3 @ end list 2 ?
movge r0,#0 @ yes -> list 2 < list 1
bge 100f
b 1b @ else loop
3:
cmp r1,r3 @ compar size
movge r0,#0 @ list 2 < list 1
movlt r0,#1 @ list 1 < list 2
100:
pop {r1-r7,lr} @ restaur registers
bx lr @ return
/******************************************************************/
/* display text with size calculation */
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
push {r0,r1,r2,r7,lr} @ save registres
mov r2,#0 @ counter length
1: @ loop length calculation
ldrb r1,[r0,r2] @ read octet start position + index
cmp r1,#0 @ if 0 its over
addne r2,r2,#1 @ else add 1 in the length
bne 1b @ and loop
@ so here r2 contains the length of the message
mov r1,r0 @ address message in r1
mov r0,#STDOUT @ code to write to the standard output Linux
mov r7, #WRITE @ code call system "write"
svc #0 @ call systeme
pop {r0,r1,r2,r7,lr} @ restaur registers */
bx lr @ return
</syntaxhighlight>
 
=={{header|Arturo}}==
 
<syntaxhighlight lang="rebol">compareLists: function [a,b][
loop 0..min @[size a, size b] 'i [
if a\[i] < b\[i] -> return true
if a\[i] > b\[i] -> return false
]
return less? size a size b
]
 
alias.infix '<=> 'compareLists
 
do [
print [1 2 1 3 2] <=> [1 2 0 4 4 0 0 0]
]</syntaxhighlight>
 
{{out}}
 
<pre>false</pre>
 
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L}}
The function is overkill as we can just compare the list's ObjMaxIndex()
<langsyntaxhighlight AHKlang="ahk">List1 := [1,2,1,3,2]
List2 := [1,2,0,4,4,0,0,0]
MsgBox % order(List1, List2)
Line 152 ⟶ 759:
order(L1, L2){
return L1.MaxIndex() < L2.MaxIndex()
}</langsyntaxhighlight>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f ORDER_TWO_NUMERICAL_LISTS.AWK
BEGIN {
Line 180 ⟶ 787:
return(ans)
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 187 ⟶ 794:
list3>=list4
</pre>
 
 
=={{header|BASIC256}}==
{{trans|FreeBASIC}}
<syntaxhighlight lang="basic256">
arraybase 1
dim list1(5): dim list2(6): dim list3(5): dim list4(5)
list1 = {1, 2, 1, 5, 2}
list2 = {1, 2, 1, 5, 2, 2}
list3 = {1, 2, 3, 4, 5}
list4 = {1, 2, 3, 4, 5}
 
if Orden(list1[], list2[]) then print "list1 < list2" else print "list 1>= list2"
if Orden(list2[], list3[]) then print "list2 < list3" else print "list2 >= list3"
if Orden(list3[], list4[]) then print "list3 < list4" else print "list3 >= list4"
end
 
function Orden(listA[], listB[])
i = 0
l1 = listA[?]
l2 = listB[?]
while (listA[i] = listB[i]) and i < l1 and i < l2
i = i + 1
end while
if listA[?] < listB[?] then return True
if listA[?] > listB[?] then return False
return l1 < l2
end function
</syntaxhighlight>
{{out}}
<pre>
Igual que la entrada de BBC BASIC.
</pre>
 
 
=={{header|BBC BASIC}}==
'Ordered before' means 'less than' (see [[Talk:Order_two_numerical_lists|talk page]]).
<langsyntaxhighlight lang="bbcbasic"> DIM list1(4) : list1() = 1, 2, 1, 5, 2
DIM list2(5) : list2() = 1, 2, 1, 5, 2, 2
DIM list3(4) : list3() = 1, 2, 3, 4, 5
Line 208 ⟶ 849:
IF list1(i%) < list2(i%) THEN = TRUE
IF list1(i%) > list2(i%) THEN = FALSE
= l1% < l2%</langsyntaxhighlight>
{{out}}
<pre>
Line 223 ⟶ 864:
In that case the function outputs FALSE.
Notice that if the arguments are the same, evaluation of the sum produces the product of one of the terms and a factor two. This complicates the pattern a bit.
<langsyntaxhighlight lang="bracmat">( 1 2 3 4 5:?List1
& 1 2 1 5 2 2:?List2
& 1 2 1 5 2:?List3
Line 246 ⟶ 887:
& gt$(!List5,!List6)
& gt$(!List6,!List7)
);</langsyntaxhighlight>
{{out}}
<pre>TRUE
Line 256 ⟶ 897:
 
=={{header|C}}==
<langsyntaxhighlight lang="c">int list_cmp(int *a, int la, int *b, int lb)
{
int i, l = la;
Line 266 ⟶ 907:
if (la == lb) return 0;
return la > lb ? 1 : -1;
}</langsyntaxhighlight>
This funciton returns one of three states, not a boolean. One can define boolean comparisons, such as <code>list_less_or_eq</code>, based on it:<langsyntaxhighlight lang="c">#define list_less_or_eq(a,b,c,d) (list_cmp(a,b,c,d) != 1)</langsyntaxhighlight>
 
=={{header|C sharp|C#}}==
<langsyntaxhighlight lang="csharp">namespace RosettaCode.OrderTwoNumericalLists
{
using System;
Line 312 ⟶ 953:
}
}
}</langsyntaxhighlight>
{{out}}
<pre>False</pre>
Line 318 ⟶ 959:
=={{header|C++}}==
The built-in comparison operators already do this:
<langsyntaxhighlight lang="cpp">#include <iostream>
#include <vector>
 
Line 340 ⟶ 981:
std::cout << std::boolalpha << (a < b) << std::endl; // prints "false"
return 0;
}</langsyntaxhighlight>
 
=={{header|clojure}}==
 
<langsyntaxhighlight lang="clojure">
(defn lex? [a b]
(compare a b))
</syntaxhighlight>
</lang>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight Lisplang="lisp">(defun list< (a b)
(cond ((not b) nil)
((not a) t)
((= (first a) (first b))
(list< (rest a) (rest b)))
(t (< (first a) (first b)))))</langsyntaxhighlight>
 
Alternate version
 
<langsyntaxhighlight Lisplang="lisp">(defun list< (a b)
(let ((x (find-if-not #'zerop (mapcar #'- a b))))
(if x (minusp x) (< (length a) (length b)))))</langsyntaxhighlight>
 
=={{header|D}}==
The built-in comparison operators already do this:
<langsyntaxhighlight lang="d">void main() {
assert([1,2,1,3,2] >= [1,2,0,4,4,0,0,0]);
}</langsyntaxhighlight>
=={{header|Delphi}}==
{{libheader| System.SysUtils}}
{{libheader| System.Generics.Defaults}}
{{Trans|Java}}
This is not a full translate of [https://rosettacode.org/wiki/Order_two_numerical_lists#Java Java], just adaptation and aplication of method previus introduced.
<syntaxhighlight lang="delphi">
program Order_two_numerical_lists;
 
{$APPTYPE CONSOLE}
 
uses
System.SysUtils,
System.Generics.Defaults;
 
type
TArray = record
class function LessOrEqual<T>(first, second: TArray<T>): Boolean; static;
end;
 
class function TArray.LessOrEqual<T>(first, second: TArray<T>): Boolean;
begin
if Length(first) = 0 then
exit(true);
if Length(second) = 0 then
exit(false);
var comp := TComparer<T>.Default.Compare(first[0], second[0]);
if comp = 0 then
exit(LessOrEqual(copy(first, 1, length(first)), copy(second, 1, length(second))));
Result := comp < 0;
end;
 
begin
writeln(TArray.LessOrEqual<Integer>([1, 2, 3], [2, 3, 4]));
writeln(TArray.LessOrEqual<Integer>([2, 3, 4], [1, 2, 3]));
writeln(TArray.LessOrEqual<Integer>([1, 2], [1, 2, 3]));
writeln(TArray.LessOrEqual<Integer>([1, 2, 3], [1, 2]));
writeln(TArray.LessOrEqual<Char>(['a', 'c', 'b'], ['a', 'b', 'b']));
writeln(TArray.LessOrEqual<string>(['this', 'is', 'a', 'test'], ['this', 'is',
'not', 'a', 'test']));
readln;
end.</syntaxhighlight>
{{out}}
<pre>TRUE
FALSE
TRUE
FALSE
FALSE
TRUE</pre>
 
=={{header|EasyLang}}==
{{trans|C}}
<syntaxhighlight>
func listcmp a[] b[] .
for i to lower len a[] len b[]
if a[i] < b[i]
return -1
elif a[i] > b[i]
return 1
.
.
if len a[] < len b[]
return -1
elif len a[] > len b[]
return 1
.
return 0
.
print listcmp [ 2 4 5 ] [ 2 3 1 ]
print listcmp [ 2 3 1 ] [ 2 3 1 ]
print listcmp [ 2 3 1 ] [ 2 3 1 3 ]
</syntaxhighlight>
 
=={{header|Ela}}==
 
<langsyntaxhighlight lang="ela">[] <. _ = true
_ <. [] = false
(x::xs) <. (y::ys) | x == y = xs <. ys
| else = x < y
 
[1,2,1,3,2] <. [1,2,0,4,4,0,0,0]</langsyntaxhighlight>
 
=={{header|Elixir}}==
The built-in comparison functions already do this (not only for lists of numbers, but for any arbitrary data type).
<langsyntaxhighlight lang="elixir">iex(1)> [1,2,3] < [1,2,3,4]
true
iex(2)> [1,2,3] < [1,2,4]
true</langsyntaxhighlight>
 
=={{header|Erlang}}==
Builtin. Example use from Erlang shell:
<syntaxhighlight lang="erlang">
<lang Erlang>
5> [1,2,3] < [1,2,3,4].
true
6> [1,2,3] < [1,2,4].
true
</syntaxhighlight>
</lang>
 
=={{header|F_Sharp|F#}}==
By using the Collection.Seq Module the static method Seq.compareWith fits our needs.
<langsyntaxhighlight lang="fsharp">let inline cmp x y = if x < y then -1 else if x = y then 0 else 1
let before (s1 : seq<'a>) (s2 : seq<'a>) = (Seq.compareWith cmp s1 s2) < 0
 
Line 413 ⟶ 1,125:
([0; 0], [1]);
]
|> List.iter (fun (x, y) -> printf "%A %s %A\n" x (if before x y then "< " else ">=") y)</langsyntaxhighlight>
{{out}}
<pre>[0] >= []
Line 433 ⟶ 1,145:
IN: scratchpad '''{ 2 3 } { 2 5 } before? .'''
t
 
 
=={{header|FreeBASIC}}==
{{trans|BBC BASIC}}
<syntaxhighlight lang="freebasic">Dim Shared list1(4) As Integer = {1, 2, 1, 5, 2}
Dim Shared list2(5) As Integer = {1, 2, 1, 5, 2, 2}
Dim Shared list3(4) As Integer = {1, 2, 3, 4, 5}
Dim Shared list4(4) As Integer = {1, 2, 3, 4, 5}
 
Function Orden(listA() As Integer, listB() As Integer) As Boolean
Dim As Integer i = 0, l1, l2
l1 = Ubound(listA, 1)
l2 = Ubound(listB, 1)
While listA(i) = listB(i) And i < l1 And i < l2
i += 1
Wend
If listA(i) < listB(i) Then Return True
If listA(i) > listB(i) Then Return False
Return l1 < l2
End Function
 
If Orden(list1(), list2()) Then Print "list1<list2" Else Print "list1>=list2"
If Orden(list2(), list3()) Then Print "list2<list3" Else Print "list2>=list3"
If Orden(list3(), list4()) Then Print "list3<list4" Else Print "list3>=list4"
 
Sleep</syntaxhighlight>
{{out}}
<pre>
Igual que la entrada de BBC BASIC.
</pre>
 
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 507 ⟶ 1,250:
}
return b
}</langsyntaxhighlight>
{{out}}
<pre>
Line 539 ⟶ 1,282:
=={{header|Groovy}}==
Solution:
<langsyntaxhighlight lang="groovy">class CList extends ArrayList implements Comparable {
CList() { }
CList(Collection c) { super(c) }
Line 548 ⟶ 1,291:
comp ? comp[0] <=> comp[1] : this.size() <=> that.size()
}
}</langsyntaxhighlight>
 
Test:
<langsyntaxhighlight lang="groovy">CList a, b; (a, b) = [[], []]; assert ! (a < b)
b = [1] as CList; assert (a < b)
a = [1] as CList; assert ! (a < b)
Line 559 ⟶ 1,302:
b = [2, -1, 0] as CList; assert ! (a < b)
b = [2, -1, 0, -17] as CList; assert (a < b)
a = [2, 8, 0] as CList; assert ! (a < b)</langsyntaxhighlight>
 
=={{header|Haskell}}==
The built-in comparison operators already do this:
<langsyntaxhighlight lang="haskell">Prelude> [1,2,1,3,2] < [1,2,0,4,4,0,0,0]
False</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
List_llt is written in the style of all Icon/Unicon relational operators returning its right argument if successful and signaling failure otherwise.
 
<langsyntaxhighlight Iconlang="icon">procedure main()
write( if list_llt([1,2,1,3,2],[1,2,0,4,4,0,0,0]) then "true" else "false" )
end
Line 579 ⟶ 1,322:
else if L1[i] >> L2[i] then fail
if *L1 < *L2 then return L2
end</langsyntaxhighlight>
 
=={{header|J}}==
Line 588 ⟶ 1,331:
However numeric scalars sort ahead of vectors, i.e. are different from length one lists.
 
<langsyntaxhighlight lang="j">before=: -.@(-: /:~)@,&<~</langsyntaxhighlight>
 
<langsyntaxhighlight lang="j">cmp=: {.@\:@,:&(,&__)</langsyntaxhighlight>
 
Below demonstrates non-decreasing order cmp treats length one vector same as scalar
 
<syntaxhighlight lang="j">
<lang j>
cmp&.>"{~ ('';0;(,0);1;(,1);1 1)
┌─┬─┬─┬─┬─┬─┐
Line 623 ⟶ 1,366:
├─┼─┼─┼─┼─┼─┤
│0│0│0│0│0│0│
└─┴─┴─┴─┴─┴─┘</langsyntaxhighlight>
 
=={{header|Java}}==
Line 629 ⟶ 1,372:
{{trans|Common Lisp}}
There are a few methods here. The method named "ordered" which works on arrays is a translation of [[#Common Lisp|Common Lisp]]. The other two are loose translations of [[#Tcl|Tcl]] (some tweaks were needed to get the length checks to work out) and are probably better options.
<langsyntaxhighlight lang="java5">import java.util.Arrays;
import java.util.List;
 
Line 662 ⟶ 1,405:
return i == first.length;
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
Line 670 ⟶ 1,413:
<= is already defined for numeric lists in JavaScript
 
<langsyntaxhighlight JavaScriptlang="javascript">(() => {
'use strict';
 
Line 687 ⟶ 1,430:
// --> [false, true]
})()
</syntaxhighlight>
</lang>
 
{{Out}}
<syntaxhighlight lang JavaScript="javascript">[false, true]</langsyntaxhighlight>
 
=={{header|Joy}}==
<syntaxhighlight lang="joy">
<lang Joy>
DEFINE order ==
[equal] [false]
[[[[size] dip size <=] [[<=] mapr2 true [and] fold]] [i] map i and]
ifte.
</syntaxhighlight>
</lang>
 
Using it:
Line 711 ⟶ 1,454:
 
=={{header|jq}}==
jq's builtin comparison operators use lexicographic ordering for arrays in general, not just arrays of integers.<langsyntaxhighlight lang="jq">
[1,2,3] < [1,2,3,4] # => true
[1,2,3] < [1,2,4] # => true
[1,2,3] < [1,2,3] # => false</langsyntaxhighlight>
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
 
<langsyntaxhighlight lang="julia">function islexless(a::AbstractArray{<:Real}, b::AbstractArray{<:Real})
for (x, y) in zip(a, b)
if x == y continue end
Line 731 ⟶ 1,474:
println("List not sorted:\n - ", join(tests, "\n - "))
sort!(tests; lt=islexless)
println("List sorted:\n - ", join(tests, "\n - "))</langsyntaxhighlight>
 
{{out}}
Line 750 ⟶ 1,493:
- [3.14159, 2.71828, 1.61803, 0.915966]
- [2015, 5]</pre>
 
=={{header|Klingphix}}==
<syntaxhighlight lang="klingphix">include ..\Utilitys.tlhy
 
( 1 2 3 ) ( 1 2 3 4 ) less ?
( 1 2 3 4 ) ( 1 2 3 ) less ?
( 1 2 4 ) ( 1 2 3 ) less ?
( 1 2 3 ) ( 1 2 3 ) less ?
( 1 2 3 ) ( 1 2 4 ) less ?
 
"End " input</syntaxhighlight>
 
=={{header|Kotlin}}==
<langsyntaxhighlight lang="scala">// version 1.0.6
 
operator fun <T> List<T>.compareTo(other: List<T>): Int
Line 779 ⟶ 1,533:
println()
for (i in 0 until lists.size - 1) println("list${i + 1} > list${i + 2} = ${lists[i] > lists[i + 1]}")
}</langsyntaxhighlight>
 
{{out}}
Line 805 ⟶ 1,559:
=={{header|Lasso}}==
This is built into the Lasso comparison operators
<langsyntaxhighlight Lassolang="lasso">local(
first = array(1,2,1,3,2),
second = array(1,2,0,4,4,0,0,0),
Line 815 ⟶ 1,569:
second = array(1,2,0,4,4,0,0,0),
)
#first < #second</langsyntaxhighlight>
{{out}}
<pre>false
Line 823 ⟶ 1,577:
Uses standard '=' notation
 
<langsyntaxhighlight lang="logo">print [1 2] = [1 2]
print [1 2] = [1 2 3]
print [1 3] = [1 2]
Line 830 ⟶ 1,584:
make "list1 [1 2 3 4 5 6]
make "list2 [1 2 3 4 5 7]
print :list1 = :list2</langsyntaxhighlight>
 
{{out}}
<langsyntaxhighlight lang="logo">true
false
false
false
false</langsyntaxhighlight>
 
=={{header|Lua}}==
Line 843 ⟶ 1,597:
In Lua tables with numerical indices are used as lists or arrays and they do not support comparison out-of-the-box, so a function is needed to implement the comparison:
<langsyntaxhighlight lang="lua">function arraycompare(a, b)
for i = 1, #a do
if b[i] == nil then
Line 853 ⟶ 1,607:
end
return true
end</langsyntaxhighlight>
 
Here is some demonstration code:
 
<langsyntaxhighlight lang="lua">function randomarray()
local t = {}
for i = 1, math.random(1, 10) do
Line 876 ⟶ 1,630:
arraycompare(a, b) and "<=" or ">",
table.concat(b, ', ')))
end</langsyntaxhighlight>
 
{{out}} (time used as random seed: 1413127434):
Line 893 ⟶ 1,647:
 
=={{header|Maple}}==
<langsyntaxhighlight Maplelang="maple">orderLists := proc(num1,num2)
local len1, len2,i:
len1,len2 := numelems(num1),numelems(num2):
Line 902 ⟶ 1,656:
end do:
return evalb(len1 < len2):
end proc:</langsyntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">order[List1_, List2_] := With[{
<lang Mathematica>
order[List1_, List2_] := With[{
L1 = List1[[1 ;; Min @@ Length /@ {List1, List2}]],
L2 = List2[[1 ;; Min @@ Length /@ {List1, List2}]]
Line 913 ⟶ 1,666:
Length[List1] < Length[List2],
Thread[Order[L1, L2]] == 1
]]</langsyntaxhighlight>
 
<pre>Example use:
order[ {1, 2, 1, 3, 2}, {1, 2, 0, 4, 4, 0, 0, 0} ]
->False
 
order[ {1, 2}, {1, 2, 4, 4, 0, 0} ]
->True</pre>
 
=={{header|Maxima}}==
<langsyntaxhighlight lang="maxima">"<<"(a,b):=block([n:min(length(a),length(b))],
catch(for i thru n do (if a[i]#b[i] then throw(is(a[i]<b[i]))),
throw(is(length(a)<length(b)))))$
Line 935 ⟶ 1,687:
 
[1,2] << [1,2];
false</langsyntaxhighlight>
 
=={{header|Mercury}}==
Line 941 ⟶ 1,693:
For a particular numerical type, you can get away with
 
<langsyntaxhighlight Mercurylang="mercury">:- pred lt(list(int)::in, list(int)::in) is semidet.
lt([], [_|_]).
lt([H1|T1], [H2|T2]) :- H1 =< H2, T1 `lt` T2.</langsyntaxhighlight>
 
For a list of any numerical type, one way would be to use a typeclass:
 
<langsyntaxhighlight Mercurylang="mercury">:- pred lt(list(T)::in, list(T)::in) is semidet <= comparable(T).
lt([], [_|_]).
lt([H1|T1], [H2|T2]) :- H1 =< H2, T1 `lt` T2.</langsyntaxhighlight>
 
... which you would have to create:
 
<langsyntaxhighlight Mercurylang="mercury">:- module comparable.
:- interface.
:- import_module int, float, integer, list.
Line 979 ⟶ 1,731:
 
% pred lt
% pred lte</langsyntaxhighlight>
 
Which would be used in this way - note the typeclass and the comparison operator.
 
<langsyntaxhighlight Mercurylang="mercury">:- pred test(list(T), list(T), io, io) <= comparable(T).
:- mode test(in, in, di, uo) is det.
test(A, B) -->
io.write(A), io.write_string(" < "), io.write(B),
io.write_string(" : "), io.write_string(S), io.nl,
{ A < B -> S = "yes" ; S = "no" }.</langsyntaxhighlight>
 
=={{header|Miranda}}==
<syntaxhighlight lang="miranda">main :: [sys_message]
main = [Stdout (lay (map show [
order [1,2,1,3,2] [1,2,0,4,4,0,0,0],
order [1,2,0,4,4,0,0,0] [1,2,1,3,2]]))]
 
order :: [*]->[*]->bool
order as [] = True
order [] as = False
order (a:as) (b:bs) = a < b, if a ~= b
= order as bs, otherwise</syntaxhighlight>
{{out}}
<pre>False
True</pre>
 
=={{header|Nim}}==
<langsyntaxhighlight lang="nim">proc `<`[T](a, b: openarray[T]): bool =
for i in 0 .. min(a.len, b.len):
if a[i] < b[i]: return true
Line 997 ⟶ 1,764:
return a.len < b.len
 
echo([1,2,1,3,2] < [1,2,0,4,4,0,0,0])</langsyntaxhighlight>
{{out}}
<pre>false</pre>
Line 1,004 ⟶ 1,771:
 
The built-in comparison operators already do this for lists (although this is not documented):
<langsyntaxhighlight lang="ocaml"># [1;2;1;3;2] < [1;2;0;4;4;0;0;0];;
- : bool = false</langsyntaxhighlight>
 
(Warning: However, the built-in comparison operators do not do this for arrays:
<langsyntaxhighlight lang="ocaml"># [|1;2;1;3;2|] < [|1;2;0;4;4;0;0;0|];;
- : bool = true</langsyntaxhighlight>
)
 
But we could write it explicitly this way:
 
<langsyntaxhighlight lang="ocaml">let rec ordered_lists = function
| x1::tl1, x2::tl2 ->
(match compare x1 x2 with
Line 1,021 ⟶ 1,788:
| _ -> true)
| [], _ -> true
| _ -> false</langsyntaxhighlight>
 
Here is a small script to test this function:
 
<langsyntaxhighlight lang="ocaml">(* copy-paste the code of ordered_lists here *)
 
let make_num_list p n =
Line 1,044 ⟶ 1,811:
print_num_list lst1;
print_num_list lst2;
Printf.printf "ordered: %B\n" (ordered_lists (lst1, lst2))</langsyntaxhighlight>
 
Sample execution:
Line 1,054 ⟶ 1,821:
Also notice that the function <code>ordered_lists</code> will work with anything the function <code>Pervasives.compare</code> is able to compare (most OCaml types and structures made from the base types). In the prototype of this function below <code>'a list</code> means a list of anything:
 
<langsyntaxhighlight lang="ocaml">val ordered_lists : 'a list * 'a list -> bool</langsyntaxhighlight>
 
=={{header|Oforth}}==
Line 1,065 ⟶ 1,832:
1 ok
</pre>
 
=={{header|Ol}}==
This sample very similar to Scheme, but implements proper tail recursion. So can test unlimited length lists.
<syntaxhighlight lang="scheme">
(define (lexorder a b)
(cond
((null? b) #false)
((null? a) #true)
((< (car a) (car b)) #true)
((> (car a) (car b)) #false)
(else
(lexorder (cdr a) (cdr b)))))
 
(print (lexorder '(1 2 3) '(1 2 3 4))) ; => true
(print (lexorder '(1 2 4) '(1 2 3))) ; => false
(print (lexorder '(1 2 3) '(1 2))) ; => false
(print (lexorder '(1 2 3) '(1 2 3))) ; => false
(print (lexorder '(1 2 3) '(1 2 8))) ; => true
</syntaxhighlight>
 
=={{header|PARI/GP}}==
<syntaxhighlight lang ="parigp">lex(u,v)<1</langsyntaxhighlight>
 
=={{header|Perl}}==
<langsyntaxhighlight Perllang="perl">use strict;
use warnings;
 
Line 1,107 ⟶ 1,893:
my $before = orderlists([@$first], [@$second]) ? 'true' : 'false';
print "(@$first) comes before (@$second) : $before\n";
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,117 ⟶ 1,903:
</pre>
 
=={{header|Perl 6Phix}}==
ThereHandled isnatively, alreadyeg ("?" is athe built-inshorthand comparisonprint operator.)
<!--<syntaxhighlight lang="phix">(phixonline)-->
<lang perl6>my @a = <1 2 4>;
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
my @b = <1 2 4>;
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 1 (true under p2js)</span>
say @a," before ",@b," = ", @a before @b;
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 0 (false "")</span>
<span style="color: #0000FF;">?{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">3</span><span style="color: #0000FF;">}<{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">4</span><span style="color: #0000FF;">}</span> <span style="color: #000080;font-style:italic;">-- 1 (true "")</span>
<!--</syntaxhighlight>-->
Elements can be any mix of integers, floating point numbers, strings, or nested subsequences, with atoms ordered before sequences.<br>
If you want -1/0/+1 (instead of the true(1)/false(0) shown above), use the builtin compare() function, and that will match under p2js.
 
=={{header|Phixmonti}}==
@a = <1 2 4>;
{{trans|Phix}}
@b = <1 2>;
<syntaxhighlight lang="phixmonti">include Utilitys.pmt
say @a," before ",@b," = ", @a before @b;
 
def ? print nl enddef
@a = <1 2>;
@b = <1 2 4>;
say @a," before ",@b," = ", @a before @b;
 
( 1 2 3 ) ( 1 2 3 4 ) < ?
for 1..10 {
( 1 2 3 my4 @a) =( flat1 (^100).roll((2.. 3 ).pick); < ?
( 1 2 4 ) ( 1 2 3 ) < ?
my @b = flat @a.map: { Bool.pick ?? $_ !! (^100).roll((0..2).pick) }
( 1 2 3 say) @a,"( before1 ",@b,"2 =3 ",) @a< before @b;?
( 1 2 3 ) ( 1 2 4 ) < ?</syntaxhighlight>
}</lang>
{{out}}
<pre>1 2 4 before 1 2 4 = False
1 2 4 before 1 2 = False
1 2 before 1 2 4 = True
63 52 before 0 52 = False
17 75 24 before 31 75 24 = True
43 32 before 43 32 = False
73 84 before 2 84 = False
73 92 before 40 24 46 = False
16 24 before 41 24 = True
9 12 22 before 9 12 32 67 = True
81 23 before 81 23 = False
55 53 1 before 55 62 83 = True
20 40 51 before 20 17 78 34 = False</pre>
 
=={{header|PhixPicat}}==
Picat has a built-in general comparison operator <code>@<</code>, which compares terms in lexicographic order (numeric lists as well as atoms, strings, variables, and structures).
Handled natively, eg ("?" is the shorthand print operator)
<syntaxhighlight lang="picat">go =>
<lang Phix>?{1,2,3}<{1,2,3,4} -- 1
Tests = [
?{1,2,3,4}<{1,2,3} -- 0
?{ [[1,2,4}<{3], [1,2,3} -- 0]],
?{ [[1,2,3}<{], [1,2,3} -- 0,4]],
?{ [[1,2,3}<{1,2],4} -- [1</lang>,2,3]],
[[1,2,4], [1,2,3]],
Elements can be any mix of integers, floating point numbers, strings, or nested subsequences, with atoms ordered before sequences.<br>
[1..10 , 1..8],
If you want -1/0/+1 (instead of the true(1)/false(0) shown above), use the builtin compare() function.
[[] , []],
[[] , [1]],
[[1] , [] ],
[[-1,2,3,6,5],[-1,2,3,5,6]],
[[-1,2,3,-5,6],[-1,2,3,-6,5]]
],
foreach([L1,L2] in Tests)
printf("%w @< %w: %w\n",L1,L2,cond(L1 @< L2,true,false))
end,
nl.</syntaxhighlight>
 
In the Picat shell, the result is yes/no rather than true/false:
<pre>
Picat> [1,2,3] @< [1,2,3]
 
no
 
Picat> [1,2,3] @< [1,2,3,4]
yes</pre>
 
=={{header|PicoLisp}}==
The built-in comparison functions already do this (not only for lists of numbers, but for any arbitrary data type).
<langsyntaxhighlight PicoLisplang="picolisp">: (> (1 2 0 4 4 0 0 0) (1 2 1 3 2))
-> NIL</langsyntaxhighlight>
 
=={{header|Pike}}==
<langsyntaxhighlight Pikelang="pike">int(0..1) order_array(array a, array b)
{
if (!sizeof(a)) return true;
Line 1,174 ⟶ 1,971:
return order_array(a[1..], b[1..]);
return a[0] < b[0];
}</langsyntaxhighlight>
Pikes <code>Array.sort_array()</code> function can sort an array of arrays using the <code><</code> operator, but it will sort longer arrays before shorter ones. Therefore the above function is still needed if the intent is to use the comparison for a sort operation.
 
If the numbers are in 32bit signed integer range, the following works too:
<langsyntaxhighlight Pikelang="pike">(string)a < (string)b;</langsyntaxhighlight>
 
=={{header|PL/I}}==
<langsyntaxhighlight PLlang="pl/Ii">lists: procedure options (main); /* 8 June 2014 */
 
declare a(10) fixed initial (1, 2, 3, 4, 5, 8, 9, 10, 16, 17),
Line 1,202 ⟶ 1,999:
end compare;
 
end lists;</langsyntaxhighlight>
Results:
<pre>
Line 1,211 ⟶ 2,008:
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
function order($as,$bs) {
if($as -and $bs) {
Line 1,221 ⟶ 2,018:
}
"$(order @(1,2,1,3,2) @(1,2,0,4,4,0,0,0))"
</syntaxhighlight>
</lang>
<b>Output:</b>
<pre>
Line 1,228 ⟶ 2,025:
 
===Non-Recursive Version===
<syntaxhighlight lang="powershell">
<lang PowerShell>
function Test-Order ([int[]]$ReferenceArray, [int[]]$DifferenceArray)
{
Line 1,245 ⟶ 2,042:
return ($ReferenceArray.Count -lt $DifferenceArray.Count) -or (Compare-Object $ReferenceArray $DifferenceArray) -eq $null
}
</syntaxhighlight>
</lang>
<syntaxhighlight lang="powershell">
<lang PowerShell>
Test-Order -ReferenceArray 1, 2, 1, 3, 2 -DifferenceArray 1, 2, 0, 4, 4, 0, 0, 0
Test-Order -ReferenceArray 1, 2, 1, 3, 2 -DifferenceArray 1, 2, 2, 4, 4, 0, 0, 0
Line 1,252 ⟶ 2,049:
Test-Order -ReferenceArray 1, 2 -DifferenceArray 1, 2, 3
Test-Order -ReferenceArray 1, 2 -DifferenceArray 1, 2
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 1,263 ⟶ 2,060:
 
=={{header|PureBasic}}==
<langsyntaxhighlight lang="purebasic">DataSection
Array_1:
Data.i 5 ;element count
Line 1,333 ⟶ 2,130:
CloseConsole()
EndIf
</langsyntaxhighlight>
{{out}}
<pre>False
Line 1,343 ⟶ 2,140:
=={{header|Python}}==
The built-in comparison operators already do this:
<langsyntaxhighlight lang="python">>>> [1,2,1,3,2] < [1,2,0,4,4,0,0,0]
False</langsyntaxhighlight>
 
=={{header|Quackery}}==
 
<syntaxhighlight lang="quackery"> [ [ over [] = iff false done
dup [] = iff true done
behead rot behead rot
2dup = iff
[ 2drop swap ] again
> ]
unrot 2drop ] is []< ( [ [ --> b )
 
' [ [ ] [ 1 ] [ 1 1 1 ] [ 1 2 ] [ 1 2 1 ] [ 2 ] [ 2 1 ] [ 2 1 1 ] ]
 
shuffle sortwith []< echo</syntaxhighlight>
 
{{out}}
 
<pre>[ [ ] [ 1 ] [ 1 1 1 ] [ 1 2 ] [ 1 2 1 ] [ 2 ] [ 2 1 ] [ 2 1 1 ] ]</pre>
 
 
=={{header|Racket}}==
<langsyntaxhighlight Racketlang="racket">#lang racket
 
(define (lex<? a b)
Line 1,356 ⟶ 2,172:
 
(lex<? '(1 2 3 4 5) '(1 2 3 4 4)) ; -> #f
</syntaxhighlight>
</lang>
 
=={{header|Raku}}==
(formerly Perl 6)
There is already a built-in comparison operator.
<syntaxhighlight lang="raku" line>my @a = <1 2 4>;
my @b = <1 2 4>;
say @a," before ",@b," = ", @a before @b;
 
@a = <1 2 4>;
@b = <1 2>;
say @a," before ",@b," = ", @a before @b;
 
@a = <1 2>;
@b = <1 2 4>;
say @a," before ",@b," = ", @a before @b;
 
for 1..10 {
my @a = flat (^100).roll((2..3).pick);
my @b = flat @a.map: { Bool.pick ?? $_ !! (^100).roll((0..2).pick) }
say @a," before ",@b," = ", @a before @b;
}</syntaxhighlight>
{{out}}
<pre>1 2 4 before 1 2 4 = False
1 2 4 before 1 2 = False
1 2 before 1 2 4 = True
63 52 before 0 52 = False
17 75 24 before 31 75 24 = True
43 32 before 43 32 = False
73 84 before 2 84 = False
73 92 before 40 24 46 = False
16 24 before 41 24 = True
9 12 22 before 9 12 32 67 = True
81 23 before 81 23 = False
55 53 1 before 55 62 83 = True
20 40 51 before 20 17 78 34 = False</pre>
 
=={{header|Rascal}}==
The built-in comparison operator already does this:
<langsyntaxhighlight lang="rascal">rascal>[2,1,3] < [5,2,1,3]
bool: true</langsyntaxhighlight>
 
=={{header|REXX}}==
This R<tt>EXX</tt>REXX example uses the same lists as &nbsp; &nbsp; <tt> ''BBC BASIC''. </tt>
<br>This example will also work with non-numeric strings.
<lang rexx>/*REXX pgm determines if a list < previous list, & returns true | false*/
@. =
@.1 = 1 2 1 5 2
@.2 = 1 2 1 5 2 2
@.3 = 1 2 3 4 5
@.4 = 1 2 3 4 5 /* [↓] compare list to previous.*/
do j=2 while @.j\==''; p=j-1 /*P is the previous.*/
answer=FNorder(@.p, @.j) /*obtain the answer.*/
if answer=='true' then is= ' < ' /*convert from true */
else is= ' ≥ ' /*convert from false*/
say right('['@.p"]", 40) is '['@.j"]"; say
end /*i*/ /* [↑] display (+ a blank line)*/
exit /*stick a fork in it, we're done.*/
/*──────────────────────────────────FNORDER subroutine──────────────────*/
FNorder: procedure; parse arg x,y; wx=words(x); wy=words(y)
 
This example will also work with non-numeric strings.
do k=1 for min(wx,wy)
<syntaxhighlight lang="rexx">/*REXX program determines if a list < previous list, and returns true or false. */
a=word(x,k); b=word(y,k)
@.=; @.1 = 1 2 1 5 if a<b then return 'true'2
@.2 = 1 2 1 5 2 else if a>b then return 'false'2
@.3 = 1 2 3 4 end /*k*/5
@.4 = 1 2 3 4 5
if wx<wy then return 'true'
/* [↓] compare a list to previous list*/
return 'false'</lang>
do j=2 while @.j\==''; p= j - 1 /*P: points to previous value in list.*/
{{out}}
if FNorder(@.p, @.j)=='true' then is= " < " /*use a more familiar glyph.*/
else is= " ≥ " /* " " " " " */
say
say right('['@.p"]", 40) is '['@.j"]"
end /*i*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
FNorder: procedure; parse arg x,y
wx= words(x); wy= words(y)
do k=1 for min(wx, wy)
a= word(x, k) /*get a value from X. */
b= word(y, k) /* " " " " Y. */
if a<b then return 'true'
else if a>b then return 'false'
end /*k*/
if wx<wy then return 'true' /*handle case of equal (so far). */
return 'false' /* " " " " " " */</syntaxhighlight>
{{out|output|:}}
<pre>
[1 2 1 5 2] < [1 2 1 5 2 2]
Line 1,399 ⟶ 2,252:
 
=={{header|Ring}}==
<langsyntaxhighlight lang="ring">
list1 = "1, 2, 1, 5, 2"
list2 = "5, 2, 1, 5, 2, 2"
Line 1,419 ⟶ 2,272:
func order alist, blist
return strcmp(alist, blist)
</syntaxhighlight>
</lang>
Output:
<pre>
Line 1,425 ⟶ 2,278:
list2>list3
list3=list4
</pre>
 
=={{header|RPL}}==
{{works with|HP|28}}
{| class="wikitable" ≪
! RPL code
! Comment
|-
|
≪ → a b
≪ a SIZE b SIZE MIN LAST <
1 ROT '''FOR''' j
'''IF''' b j GET a j GET - '''THEN'''
LAST 0 > SWAP DROP
a SIZE 'j' STO
'''END'''
'''NEXT'''
≫ ≫ ‘<span style="color:blue">GR8R?</span>’ STO
|
<span style="color:blue">GR8R?</span> ''( [reals] [reals] → boolean ) ''
m = min(size(a),size(b)) ; res = (size(a)<size(b))
loop for j=1 to m
if b[j]-a[j] ≠ 0
res = (b[j]-a[j]>0)
break
end if
end loop, return res
.
|}
[1 2 1 5 2] [1 2 1 5 2 2] <span style="color:blue">GR8R?</span>
[1 2 1 5 2 2] [1 2 1 5 2] <span style="color:blue">GR8R?</span>
[1 2 1 5 2 2] [1 2 3 4 5] <span style="color:blue">GR8R?</span>
[1 2 3 4 5] [1 2 1 5 2 2] <span style="color:blue">GR8R?</span>
[1 2 3 4 5] [1 2 3 4 5] <span style="color:blue">GR8R?</span>
{{out}}
<pre>
5: 1
4: 0
3: 1
2: 0
1: 0
</pre>
 
=={{header|Ruby}}==
The built-in <code><=></code> operator already does this:
<langsyntaxhighlight lang="ruby">>> ([1,2,1,3,2] <=> [1,2,0,4,4,0,0,0]) < 0
=> false</langsyntaxhighlight>
 
=={{header|Rust}}==
<code>Vec<T></code> implements <code>Ord</code> when <code>T</code> does, so we can just compare them with <code><</code>. (Same with arrays and slices).
<syntaxhighlight lang="rust">vec![1, 2, 1, 3, 2] < vec![1, 2, 0, 4, 4, 0, 0, 0]</syntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight Scalalang="scala">def lessThan1(a: List[Int], b: List[Int]): Boolean =
if (b.isEmpty) false
else if (a.isEmpty) true
else if (a.head != b.head) a.head < b.head
else lessThan1(a.tail, b.tail)</langsyntaxhighlight><syntaxhighlight lang Scala="scala">def lessThan2(a: List[Int], b: List[Int]): Boolean = (a, b) match {
case (_, Nil) => false
case (Nil, _) => true
case (a :: _, b :: _) if a != b => a < b
case _ => lessThan2(a.tail, b.tail)
}</langsyntaxhighlight><syntaxhighlight lang Scala="scala">def lessThan3(a: List[Int], b: List[Int]): Boolean =
a.zipAll(b, Integer.MIN_VALUE, Integer.MIN_VALUE)
.find{case (a, b) => a != b}
.map{case (a, b) => a < b}
.getOrElse(false)</langsyntaxhighlight><syntaxhighlight lang Scala="scala">val tests = List(
(List(1, 2, 3), List(1, 2, 3)) -> false,
(List(3, 2, 1), List(3, 2, 1)) -> false,
Line 1,459 ⟶ 2,357:
assert(lessThan2(a, b) == c, test)
assert(lessThan3(a, b) == c, test)
}</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(define (lex<? a b)
(cond ((null? b) #f)
((null? a) #t)
((= (car a) (car b)) (lex<? (cdr a) (cdr b)))
(else (< (car a) (car b)))))</langsyntaxhighlight>
 
=={{header|Seed7}}==
The operator corresponding to the ordering described in this example is less than.
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const proc: main is func
Line 1,483 ⟶ 2,381:
writeln([] (1) < 0 times 0); # Any nonempty list is not less than the empty list --> FALSE
writeln(0 times 0 < 0 times 0); # The empty list is not less than the empty list --> FALSE
end func;</langsyntaxhighlight>
 
{{out}}
Line 1,499 ⟶ 2,397:
=={{header|Sidef}}==
Built-in, via the comparison operator (`<=>`):
<langsyntaxhighlight lang="ruby">func ordered(a, b) {
(a <=> b) < 0
}
Line 1,512 ⟶ 2,410:
var before = ordered(a, b)
say "#{a} comes before #{b} : #{before}"
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,521 ⟶ 2,419:
 
=={{header|Standard ML}}==
<langsyntaxhighlight lang="sml">- List.collate Int.compare ([1,2,1,3,2], [1,2,0,4,4,0,0,0]) = LESS;
val it = false : bool</langsyntaxhighlight>
 
=={{header|Swift}}==
<langsyntaxhighlight lang="swift">let a = [1,2,1,3,2]
let b = [1,2,0,4,4,0,0,0]
println(lexicographicalCompare(a, b)) // this is "less than"</langsyntaxhighlight>
{{out}}
<pre>
Line 1,534 ⟶ 2,432:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc numlist< {A B} {
foreach a $A b $B {
if {$a<$b} {
Line 1,543 ⟶ 2,441:
}
return 0
}</langsyntaxhighlight>
 
=={{header|TUSCRIPT}}==
<langsyntaxhighlight lang="tuscript">
$$ MODE TUSCRIPT
MODE DATA
Line 1,571 ⟶ 2,469:
list1=VALUE(list2)
ENDLOOP
</syntaxhighlight>
</lang>
{{out}}
<pre style='height:30ex;overflow:scroll'>
Line 1,585 ⟶ 2,483:
true: 1'2 < 1'2'4
</pre>
 
=={{header|VBA}}==
<syntaxhighlight lang="vb">Private Function order(list1 As Variant, list2 As Variant) As Boolean
i = 1
Do While list1(i) <= list2(i)
i = i + 1
If i > UBound(list1) Then
order = True
Exit Function
End If
If i > UBound(list2) Then
order = False
Exit Function
End If
Loop
order = False
End Function
Public Sub main()
Debug.Print order([{1, 2, 3, 4}], [{1,2,0,1,2}])
Debug.Print order([{1, 2, 3, 4}], [{1,2,3}])
Debug.Print order([{1, 2, 3}], [{1,2,3,4}])
End Sub</syntaxhighlight>{{out}}
<pre>Onwaar
Onwaar
Waar</pre>
 
=={{header|VBScript}}==
<syntaxhighlight lang="vb">
<lang vb>
Function order_list(arr1,arr2)
order_list = "FAIL"
Line 1,621 ⟶ 2,544:
WScript.StdOut.WriteLine order_list(Array(0,0),Array(1))
WScript.StdOut.WriteLine order_list(Array(1,2,1,3,2),Array(1,2,0,4,4,0,0,0))
</syntaxhighlight>
</lang>
 
{{Out}}
Line 1,639 ⟶ 2,562:
=={{header|Wart}}==
We'll simply overload <code>&lt;</code> for lists.
<langsyntaxhighlight lang="python">def (a < b) :case (or list?.a list?.b)
if not.b
nil
Line 1,647 ⟶ 2,570:
(cdr.a < cdr.b)
:else
(car.a < car.b)</langsyntaxhighlight>
 
{{out}}
Line 1,659 ⟶ 2,582:
(< '(1 2 4) '(1 2 3 4))
=> nil</pre>
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">var orderLists = Fn.new { |l1, l2|
var len = (l1.count <= l2.count) ? l1.count : l2.count
for (i in 0...len) {
if (l1[i] < l2[i]) return true
if (l1[i] > l2[i]) return false
}
return (l1.count < l2.count)
}
 
var lists = [
[1, 2, 3, 4, 5],
[1, 2, 1, 5, 2, 2],
[1, 2, 1, 5, 2],
[1, 2, 1, 5, 2],
[1, 2, 1, 3, 2],
[1, 2, 0, 4, 4, 0, 0, 0],
[1, 2, 0, 4, 4, 1, 0, 0],
[1, 2, 0, 4, 4, 1, 0, 1]
]
 
for (i in 0...lists.count) System.print("list[%(i)] : %(lists[i])")
System.print()
for (i in 0...lists.count-1) {
var res = orderLists.call(lists[i], lists[i+1])
System.print("list[%(i)] < list[%(i+1)] -> %(res)")
}</syntaxhighlight>
 
{{out}}
<pre>
list[0] : [1, 2, 3, 4, 5]
list[1] : [1, 2, 1, 5, 2, 2]
list[2] : [1, 2, 1, 5, 2]
list[3] : [1, 2, 1, 5, 2]
list[4] : [1, 2, 1, 3, 2]
list[5] : [1, 2, 0, 4, 4, 0, 0, 0]
list[6] : [1, 2, 0, 4, 4, 1, 0, 0]
list[7] : [1, 2, 0, 4, 4, 1, 0, 1]
 
list[0] < list[1] -> false
list[1] < list[2] -> false
list[2] < list[3] -> false
list[3] < list[4] -> false
list[4] < list[5] -> false
list[5] < list[6] -> true
list[6] < list[7] -> true
</pre>
 
=={{header|XPL0}}==
{{trans|ALGOL W}}
<syntaxhighlight lang "XPL0"> \Compare lists (rows) of integers.
\Returns TRUE if there is an element in A that is < the corresponding
\ element in B and all previous elements are equal, FALSE otherwise.
\The bounds of A and B should ALB :: AUB and BLB :: BUB.
function ILT ( A, ALB, AUB, B, BLB, BUB );
integer A, ALB, AUB, B, BLB, BUB;
integer APos, BPos, Equal;
begin
APos := ALB;
BPos := BLB;
Equal := true;
while APos <= AUB and BPos <= BUB and Equal do begin
Equal := A( APos ) = B( BPos );
if Equal then begin
APos := APos + 1;
BPos := BPos + 1
end \if_Equal
end; \while_more_elements_and_Equal
if not Equal
then \there is an element in A and B that is not Equal
return A( APos ) < B( BPos )
else \all elements are Equal or one list is shorter
\A is < B if A has fewer elements
return APos > AUB and BPos <= BUB
end; \ILT
 
\Tests A < B has the expected result
procedure Test ( AName, A, ALB, AUB, BName, B, BLB, BUB, Expected );
integer AName, A, ALB, AUB, BName, B, BLB, BUB, Expected;
integer IsLt;
begin
IsLt := ILT( A, ALB, AUB, B, BLB, BUB );
Text(0, AName);
Text(0, if IsLt then " < " else " >= ");
Text(0, BName);
Text(0, if IsLt = Expected then " " else ", NOT as expected");
CrLf(0);
end; \test
 
integer List1, List2, List3, List4, List5, List6, List7, List8;
begin
\test cases as in the BBC basic sample
List1 := [0, 1, 2, 1, 5, 2];
List2 := [0, 1, 2, 1, 5, 2, 2];
List3 := [0, 1, 2, 3, 4, 5];
List4 := [0, 1, 2, 3, 4, 5];
Test( "List1", List1, 1, 5, "List2", List2, 1, 6, true );
Test( "List2", List2, 1, 6, "List3", List3, 1, 5, true );
Test( "List3", List3, 1, 5, "List4", List4, 1, 5, false );
\additional test cases
List5 := [0, 9, 0, 2, 1, 0];
List6 := [0, 4, 0, 7, 7];
List7 := [0, 4, 0, 7];
List8 := [0, 0];
Test( "List5", List5, 1, 5, "List6", List6, 1, 4, false );
Test( "List6", List6, 1, 4, "List7", List7, 1, 3, false );
Test( "List7", List7, 1, 3, "List8", List8, 1, 0, false );
Test( "List8", List8, 1, 0, "List7", List7, 1, 3, true )
end</syntaxhighlight>
{{out}}
<pre>
List1 < List2
List2 < List3
List3 >= List4
List5 >= List6
List6 >= List7
List7 >= List8
List8 < List7
</pre>
 
=={{header|Yabasic}}==
{{trans|FreeBASIC}}
<syntaxhighlight lang="yabasic">
read num : dim list1(4)
read num : dim list2(5)
read num : dim list3(4)
read num : dim list4(4)
 
if Orden(list1(), list2()) then print "list1 < list2" else print "list1 >= list2" : fi
if Orden(list2(), list3()) then print "list2 < list3" else print "list2 >= list3" : fi
if Orden(list3(), list4()) then print "list3 < list4" else print "list3 >= list4" : fi
end
 
sub Orden(listA(), listB())
i = 0
l1 = arraysize(listA(), 1)
l2 = arraysize(listB(), 1)
while listA(i) = listB(i) and i < l1 and i < l2
i = i + 1
wend
if listA(i) < listB(i) then return True : fi
if listA(i) > listB(i) then return False : fi
return l1 < l2
end sub
 
data 1, 2, 1, 5, 2
data 1, 2, 1, 5, 2, 2
data 1, 2, 3, 4, 5
data 1, 2, 3, 4, 5
</syntaxhighlight>
{{out}}
<pre>
Igual que la entrada de BBC BASIC.
</pre>
 
=={{header|zkl}}==
<langsyntaxhighlight lang="zkl">fcn listLT(a,b){
a.walker().zip(b).filter1(fcn([(a,b)]){ a<b }) : // lazy
if(_) return(True);;
a.len()<b.len()
}</langsyntaxhighlight>
{{out}}
<pre>
1,983

edits