저는 haskell을 배우기 시작했습니다. 간단 할 수도 있지만 해결할 수 없다는 점에서 도움이 필요합니다. 나는이 형식이 문자열을 변환 할 필요가문자열을 bigram 목록으로 변환
ABCDEFG
:
이A-B
B-C
C-D
D-E
E-F
F-G
는 친절하게도 누군가가 나에게 약간의 팁을 제공하는 것입니다
나는 문자열을 가지고? 감사합니다.저는 haskell을 배우기 시작했습니다. 간단 할 수도 있지만 해결할 수 없다는 점에서 도움이 필요합니다. 나는이 형식이 문자열을 변환 할 필요가문자열을 bigram 목록으로 변환
ABCDEFG
:
이A-B
B-C
C-D
D-E
E-F
F-G
는 친절하게도 누군가가 나에게 약간의 팁을 제공하는 것입니다
나는 문자열을 가지고? 감사합니다.은 간단하게 다음과 같이 Data.List
에서 zip
를 사용 쌍 [(Char, Char)]
의 목록을 반환
let str = "ABCDEFG"
in zip str $ tail str
합니다.
그런 다음 귀하의 질문에 같은 출력 무언가에, 당신이 뭔가를 할 수 있습니다 : 다음
let str = "ABCDEFG"
let pairs = zip str (drop 1 str)
당신은을 통해 매핑 할 수 있습니다 :
main :: IO()
main = do
let str = "ABCDEFGH"
couples = zip str $ tail str
mapM_ (\(x,y) -> putStrLn $ x : '-' : y : "") couples
당신은 zip
및 drop
를 사용하여 연속적인 문자를 페어링 할 수 있습니다 문자 쌍 목록을 사용하여 문자열을 만듭니다.
map (\(f, s) -> f:'-':s:[]) pairs
은 문자열 목록을 제공합니다.
댓글이 지적 하듯이
, 대신zip
,
map
및
drop 1
당신은 사용할 수
zipWith
및
tail
:
zipWith (\f s -> f:'-':s:[]) str (tail str)
단일 라인에서이 작업을 수행 할 수 있습니다
:
let stringList = map (\(f, s) -> f:'-':s:[]) $ zip str (drop 1 str)
당신이 필요로하는 경우 단일 출력 문자열 unlines
예. 될 수
putStr (formatPairs "ABCDEFG")
감사. 좋은 코드 조각. :) – cao
... : 당신이
putStr
을 사용할 수 있습니다또는
당신이 필요로하는 경우
그것을 인쇄 : 하나의 함수로'zipWithM_ (\ xy -> putStrL n $ [x, '-', y]) str (tail str)'. –
이것은 나에게 정말 이상한 코드이지만, 와우 :) 나는이 기능을 연구해야 할 것이다. 감사. – cao