Phrase reversals: Difference between revisions
→{{header|AppleScript}}: Updated primitives
(Added Common Lisp) |
(→{{header|AppleScript}}: Updated primitives) |
||
Line 193:
unlines({¬
_reverse(phrase), ¬
unwords(map(_reverse, _words(phrase)
unwords(_reverse(_words(phrase)))
})▼
end run
on _reverse(xs)▼
if class of xs is text then▼
return (reverse of characters of xs) as text▼
else▼
return reverse of xs▼
end if▼
end _reverse▼
on _words(str)▼
return words of str▼
end _words▼
-- GENERIC FUNCTIONS
-- [a] -> (a -> b) -> [b]▼
on map(xs, f)▼
set mf to mReturn(f)
set lst to {}▼
set lng to length of xs
▲ set lst to {}
repeat with i from 1 to lng
set end of lst to mf's
end repeat
return lst
end map
-- intercalate :: Text -> [Text] -> Text▼
-- lift 2nd class function into 1st class wrapper ▼
on intercalate(strText, lstText)▼
set {dlm, my text item delimiters} to {my text item delimiters, strText}▼
on mReturn(f)▼
set strJoined to lstText as text▼
set my text item
end
-- _reverse :: [a] -> [a]
▲on _reverse(xs)
▲ if class of xs is text then
▲ else
▲ end if
▲end _reverse
-- _words :: String -> [String]
▲on _words(str)
▲end _words
-- unlines :: [
on unlines(lstLines)
intercalate(linefeed, lstLines)
end unlines
-- unwords :: :: [
on unwords(lstWords)
intercalate(space, lstWords)
end unwords
-- mReturn :: Handler -> Script
▲on mReturn(f)
property lambda : f
end script
end if
end mReturn
</lang>
▲-- 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
{{out}}
<pre>"lasrever esarhp edoc attesor
|