카테고리 없음

[끈] Haskell 목록 이해, 두 문자열 사이에 문자열 추가

행복을전해요 2021. 2. 24. 08:23

정말 가까워요! 나는 확신 당신이 얻고있는 오류 메시지가 일치 할 수없는 것보다 뭔가 다른거야

[Char]

하고

String

이들은 동일하기 때문에 비록!타입 시그니처를 제거하면 어떻게되는지 봅시다

inserts

(ghci에서이 작업을 수행하지만 물론 파일을 통해서도 시도 할 수 있습니다).

Prelude> let inserts str pairs = [[x,str,z] | (x,z) <- pairs, length x == length z]
Prelude> :t inserts
inserts :: [a] -> [([a], [a])] -> [[[a]]]

좋아요, 꽤 일반적인 유형입니다. 아시다시피

String

[Char]

. 우리가 대체한다면

Char

위해

a

의 종류에

inserts

있으며 장착

[Char]

하여

String

, 우리는 것을 알 수 있습니다

inserts

에 전문 수 있습니다

String -> [(String,String)] -> [[String]]

.따라서 인수는 일치하지만 결과에 한 수준의 목록이 너무 많습니다. 그 이후, 꽤 논리적이다

x

,

str

z

그래서, 문자열은

[x,str,z]

문자열의 목록입니다. 필요한 것은이 세 문자열을 하나로 연결하는 것입니다.

x ++ str ++ z

목록 이해력의 왼쪽에있는 표현식으로 사용하여 목록을 '손으로'추가 할 수 있습니다. 또는이를 사용

concat [x,str,z]

하여 수행 할 수 있습니다 .

concat

목록 (

Char

이 경우 행위자의 목록)을 목록으로 병합 합니다.


두 번째 시도에서는 3 튜플의 문자열 대신 비슷한 것을 사용할 수 있습니다. 무엇을

(x, str, y)

해야하는지 아십니까? -------------------
유형이 정확하려면 첫 번째 기능이 다음과 같아야한다고 생각합니다.

inserts :: String -> [(String, String)] -> [String]
inserts str pairs = [x ++ str ++z | (x,z) <- pairs, length (x) == length (z)]

또는

inserts :: String -> [(String, String)] -> [[String]]
inserts str pairs = [[x,str,z] | (x,z) <- pairs, length (x) == length (z)]

, 필요에 따라.

출처
https://stackoverflow.com/questions/22080072