Compare length of two strings: Difference between revisions

adding lambdatalk contribution
(Applesoft BASIC)
(adding lambdatalk contribution)
Line 1,101:
"longer" has length (codepoints) 6 and utf8 byte length 6.
</pre>
 
=={{header|Lambdatalk}}==
Using only 3 lambdatalk primitives working on pairs, [cons, car, cdr], and 1 lambdatalk primitive testing the equality of 2 words, W.equal?, we define the L.sort function waiting for a predicate function and a list.
 
<lang Scheme>
{def L.sort
{lambda {:filter :l}
{if {W.equal? :l nil}
then nil
else {L.insert {car :l} :filter
{L.sort :filter {cdr :l}}}}}}
-> L.sort
 
{def L.insert
{lambda {:x :filter :l}
{if {W.equal? :l nil}
then {cons :x nil}
else {if {:filter :x {car :l}}
then {cons :x :l}
else {cons {car :l}
{L.insert :x :filter {cdr :l}}}}}}}
-> L.insert
</lang>
 
Using 2 lambdatalk primitives working on words, [W.equal?, W.length], and 3 lambdatalk primtives working on sentences, [S.empty?, S.first, S.rest], we define 2 helper functions, [L.new, L.disp], to build and display a list according to a chosen format.
<lang Scheme>
{def L.new
{lambda {:s}
{if {S.empty? {S.rest :s}}
then {cons {S.first :s} nil}
else {cons {S.first :s} {L.new {S.rest :s}}}}}}
-> L.new
 
{def L.disp
{lambda {:l}
{if {W.equal? :l nil}
then
else {br} {W.length {car :l}} : {car :l}
{L.disp {cdr :l}}}}}
-> L.disp
</lang>
 
For instance
 
<lang Scheme>
{def B {L.new abcd 123456789 abcdef 1234567}}
-> B
 
{L.disp {B}}
->
4 : abcd
9 : 123456789
6 : abcdef
7 : 1234567
</lang>
 
Defining a predicate function (which could be anonymous) testing the length of 2 words
 
<lang Scheme>
{def filter
{lambda {:a :b}
{> {W.length :a} {W.length :b}}}}
-> filter
</lang>
 
we display the B list sorted according to the length of its elements.
 
<lang Scheme>
{L.disp {L.sort filter {B}}}
->
9 : 123456789
7 : 1234567
6 : abcdef
4 : abcd
</lang>
 
Note that in lambdatalk words (and numbers) don't need to be quoted.
 
=={{header|Lua}}==