Haskell 我怎样才能读一个句子,把单词分开,并把我的功能运用到每个单词上?哈斯克尔

Haskell 我怎样才能读一个句子,把单词分开,并把我的功能运用到每个单词上?哈斯克尔,haskell,Haskell,我有一个函数,它可以读取一个单词,将第一个字母和最后一个字母分开,剩下的内容混合在一起,最后用混合的内容写出单词的第一个字母和最后一个字母 例如: 你好->你好 但是我希望你能读一个短语,并且在句子的每个单词中都能做同样的事情。我能做什么 import Data.List import System.IO import System.Random import System.IO.Unsafe import Data.Array.IO import Control.Monad import D

我有一个函数,它可以读取一个单词,将第一个字母和最后一个字母分开,剩下的内容混合在一起,最后用混合的内容写出单词的第一个字母和最后一个字母

例如: 你好->你好

但是我希望你能读一个短语,并且在句子的每个单词中都能做同样的事情。我能做什么

import Data.List
import System.IO 
import System.Random
import System.IO.Unsafe
import Data.Array.IO
import Control.Monad
import Data.Array

oracion = do 
 frase <- getLine
 let pL = head frase
 let contentR = devContent frase
 charDisorder <- aleatorio contentR
 let uL = last frase
 putStrLn $ [pL] ++ charDisorder ++ [uL]

aleatorio :: [d] -> IO [d]
aleatorio xs = do
        ar <- newArray n xs
        forM [1..n] $ \i -> do
            t <- randomRIO (i,n)
            vi <- readArray ar i
            vt <- readArray ar t
            writeArray ar t vi
            return vt
  where
    n = length xs
    newArray :: Int -> [d] -> IO (IOArray Int d)
    newArray n xs =  newListArray (1,n) xs

devContent :: [Char] -> [Char]
devContent x = init (drop 1 x)
导入数据。列表
导入系统.IO
导入系统。随机
导入System.IO不安全
导入Data.Array.IO
进口管制
导入数据。数组
oracion=do

frase应该是这样的:

doStuffOnSentence sentence = mapM aleatorio (words sentence)
无论何时处理monad(尤其是IO)
mapM
都是真正的救星

此外,如果要连接最终结果,可以添加:

concatIoStrings = liftM unwords
doStuffAndConcat = concatIoStrings . doStuffOnSentence
一些有用的函数:。