사람의 성을 사용하고 성만 반환하는 하스켈 함수를 작성하려고합니다. 예를 들어 getName "Hans Christian Anderson"
은 "Anderson"
을 반환해야합니다.하스켈 오류 - 예상 유형 'Char'와 실제 유형 '[Char]'을 일치시킬 수 없습니다.
getname :: String -> String
getname fullName = do
let nameList = splitOn " " fullName -- split the full name into individual names
let reversedName = reverse nameList -- reverse the full name
let lastName = reversedName !! 0 -- get the first name from the reversed list
return lastName
하지만이를 컴파일하려고 할 때마다, 나는 다음과 같은 오류 얻을 :이 기능은 다음과 같습니다
Couldn't match expected type ‘Char’ with actual type ‘[Char]’
In the first argument of ‘return’, namely ‘lastName’
In a stmt of a 'do' block: return lastName
나는 완전히이 오류를 이해 모르겠어요합니다. 내가 하스켈을 이해함에 따라 구조가 [Char]
은 String
과 같을 것이다. 왜 그냥이 Char
형식이 반환 문에서 문자열로 나타나는 것으로 예상하는지 이해가 가지 않습니다. 나는 각 라인을 넘었고 그들은 나에게 맞는 것 같다.
이 문제가 발생하는 이유와 해결 방법에 대한 조언이 있으면 감사하겠습니다.
이 좋은 프로그래밍 연습이다. 그러나 [이름에 관한이 이야기를 즐기실 수도 있습니다.] (https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/). –
@DanielWagner 이전에 그런 것을 보았습니다. 실제로 잘못된 결과가 나오지 않도록 내가 다루고있는 이름에 대해 얼마나 조심해야하는지 조심했습니다. 그러나,이 연습의 목적을 위해, 나는 약간 무거워서 많은 가정들을 생각해 볼 수있었습니다. –