Thue-Morse: Difference between revisions
Content added Content deleted
(→{{header|JavaScript}}: added output) |
|||
Line 36: | Line 36: | ||
0110100110010110100101100110100110010110011010010110100110010110 |
0110100110010110100101100110100110010110011010010110100110010110 |
||
</pre> |
</pre> |
||
=={{header|AppleScript}}== |
|||
{{Trans|JavaScript}} |
|||
<lang AppleScript>-- thueMorse :: Int -> String |
|||
on thueMorse(nCycles) |
|||
script concatBinaryInverse |
|||
on lambda(xs) |
|||
script binaryInverse |
|||
on lambda(x) |
|||
1 - x |
|||
end lambda |
|||
end script |
|||
xs & map(binaryInverse, xs) |
|||
end lambda |
|||
end script |
|||
intercalate("", ¬ |
|||
foldl(concatBinaryInverse, [0], range(1, nCycles))) |
|||
end thueMorse |
|||
-- TEST |
|||
on run |
|||
thueMorse(6) |
|||
--> 0110100110010110100101100110100110010110011010010110100110010110 |
|||
end run |
|||
-- GENERIC LIBRARY FUNCTIONS |
|||
-- map :: (a -> b) -> [a] -> [b] |
|||
on map(f, xs) |
|||
tell mReturn(f) |
|||
set lng to length of xs |
|||
set lst to {} |
|||
repeat with i from 1 to lng |
|||
set end of lst to lambda(item i of xs, i, xs) |
|||
end repeat |
|||
return lst |
|||
end tell |
|||
end map |
|||
-- foldl :: (a -> b -> a) -> a -> [b] -> a |
|||
on foldl(f, startValue, xs) |
|||
tell mReturn(f) |
|||
set v to startValue |
|||
set lng to length of xs |
|||
repeat with i from 1 to lng |
|||
set v to lambda(v, item i of xs, i, xs) |
|||
end repeat |
|||
return v |
|||
end tell |
|||
end foldl |
|||
-- intercalate :: Text -> [Text] -> Text |
|||
on intercalate(strText, lstText) |
|||
set {dlm, my text item delimiters} to {my text item delimiters, strText} |
|||
set strJoined to lstText as text |
|||
set my text item delimiters to dlm |
|||
return strJoined |
|||
end intercalate |
|||
-- range :: Int -> Int -> [Int] |
|||
on range(m, n) |
|||
if n < m then |
|||
set d to -1 |
|||
else |
|||
set d to 1 |
|||
end if |
|||
set lst to {} |
|||
repeat with i from m to n by d |
|||
set end of lst to i |
|||
end repeat |
|||
return lst |
|||
end range |
|||
-- Lift 2nd class handler function into 1st class script wrapper |
|||
-- mReturn :: Handler -> Script |
|||
on mReturn(f) |
|||
if class of f is script then |
|||
f |
|||
else |
|||
script |
|||
property lambda : f |
|||
end script |
|||
end if |
|||
end mReturn</lang> |
|||
<pre>"0110100110010110100101100110100110010110011010010110100110010110"</pre> |
|||
=={{header|AWK}}== |
=={{header|AWK}}== |