연결

2014-09-17 5 views
0

I 한 그을음 문자열의 입력으로 주어진 두 문자열 CONCAT 출력연결

type Language = [String] 
cat :: Language -> Language -> Language 
cat l1 l2 = 
    case l1 of 
    [""] -> l2 
    (x:xs) -> case l2 of 
       [""] -> l1 
       (y:ys) -> xs ++ ys 

출력이어야하는리스트에 넣어 가지고

["string1string2"] 

임의 haskell의 아이디어? 정확한 문제 사양을 감안할 때

+3

나는 많은 아이디어가 있습니다. 여기에 두 가지가 있습니다 : 이것은 심각하게 지정되어 있지 않습니다. 불확실성의 정도와 형태는 이것이 XY 문제임을 시사합니다. 당신은 실제로 무엇을하려고합니까? – Carl

+0

@Carl Language는 내가 Language = [String]이라는 문자열 목록으로 정의한 것입니다. Language1과 Language2를 연결해야합니다. –

+1

문자열을 어떻게 연결 하시겠습니까? 예를 들어'[ "a", "b"]'및'[ ""c ","d "]'결과는'["ac ","bd "]'이거나 그렇지 않으면 결과가'[" ac ","ad ","bc ","bd "]'? –

답변

5

, 그것은

concatWithinLists :: [String] -> [String] -> [String] 
concatWithinLists [x] [y] = [x ++ y] 

이 방법의 모든 종류의 불량에 의해 해결된다. 그들 모두는 당신의 주장으로 인해 길이가 정확히 1 인 목록만을 가지고 목록의 요점을 완전히 잃어버린 것입니다.

이 문제로 이끄는 모든 사항을 다시 고려해 보시기 바랍니다. 진짜 문제는 여기에 있지 않습니다 - 그것은 당신의 디자인에서 어딘가 높은 곳에 있습니다. 데이터 내용에 대한 유형 시스템에 거짓말을하는 한 계속 문제가됩니다. [String]으로 작업하지 않고 String과 협력 중이며 아무런 이익이 없도록 소음을 첨부했습니다.

+4

@mehidx_ 간단한 용어 : 목록에 하나의 요소 만 있으면 목록을 사용해야합니까? 간단히'type Language = String'을 선언하십시오. –

1

왜 문자열을 목록에 전달하고 있습니까? 이렇게하면 빈 목록이 인수로 주어진 경우 (예 : cat [""] [] 제외) 코드가 충돌하는 등의 문제가 발생합니다. 또한 패턴 일치가 해제되어 있습니다. 단 일치 목록을 인수로 전달하면 xs ++ ys[] ++ []이됩니다. 이는 [x] = x:[]이기 때문입니다. 더 간단한 해결책은 다음과 같습니다.

cat :: String -> String -> [String] 
cat s1 s2 = [s1 ++ s2]