49 lines
1 KiB
Text
49 lines
1 KiB
Text
{def entropy
|
|
|
|
{def entropy.count
|
|
{lambda {:s :c :i}
|
|
{let { {:c {/ {A.get :i :c} {A.length :s}}}
|
|
} {* :c {log2 :c}}}}}
|
|
|
|
{def entropy.sum
|
|
{lambda {:s :c}
|
|
{- {+ {S.map {entropy.count :s :c}
|
|
{S.serie 0 {- {A.length :c} 1}}}}}}}
|
|
|
|
{lambda {:s}
|
|
{entropy.sum {A.split :s} {cdr {W.frequency :s}}}}}
|
|
-> entropy
|
|
|
|
The W.frequency function is explained in rosettacode.org/wiki/Letter_frequency#Lambdatalk
|
|
|
|
{def txt 1223334444}
|
|
-> txt
|
|
{def F {W.frequency {txt}}}
|
|
-> F
|
|
characters: {car {F}} -> [1,2,3,4]
|
|
frequencies: {cdr {F}} -> [1,2,3,4]
|
|
{entropy {txt}}
|
|
-> 1.8464393446710154
|
|
|
|
{entropy 0}
|
|
-> 0
|
|
{entropy 00000000000000}
|
|
-> 0
|
|
{entropy 11111111111111}
|
|
-> 0
|
|
{entropy 01}
|
|
-> 1
|
|
{entropy Lambdatalk}
|
|
-> 2.8464393446710154
|
|
{entropy entropy}
|
|
-> 2.807354922057604
|
|
{entropy abcdefgh}
|
|
-> 3
|
|
{entropy Rosetta Code}
|
|
-> 3.084962500721156
|
|
{entropy Longtemps je me suis couché de bonne heure}
|
|
-> 3.8608288771249444
|
|
{entropy abcdefghijklmnopqrstuvwxyz}
|
|
-> 4.70043971814109
|
|
{entropy abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz}
|
|
-> 4.70043971814109
|