2014-11-15 4 views
0

에 문자를 트랜스 :하스켈 내가 형태의 함수를 작성하기 위해 노력하고있어 문자열

f :: String -> [String] 
f st = ... 

그것은 문자열에서 문자의 모든 가능한 transposions를 표시해야합니다. 예를 들어 :

ghci> f "string" 
["tsring","srting","stirng","strnig","strign"] 

당신이 오직 현재와 다음 문자를 트랜스해야 볼 수 있듯이.

f :: String -> [String] 
f [] = [] 
f (x:xs) = ... 

하지만 난 실제로 문자를 바꾸어하는 방법을 잘 모릅니다 : 나는 현재하고 있습니다.

답변

4
f :: String -> [String] 
f (x:y:xs) = (y:x:xs) : map (x:) (f (y:xs)) 
f  xs = [] 

주, 그 f [x] 반환 [],하지만이 필요한 경우는, 쉽게 해결할 수 있습니다.

+0

나는 당신이 할 수 있다는 것을 알지 못했다. (x : y : xs), 고마워! 그게 내가 찾고 있었던 것. – user3657850

관련 문제