다음 코드를 구현하여 이름 목록에 새 항목을 만들었습니다 (이름과 생년월일 포함). 목록은 알파벳순으로 정렬되며이 정렬을 유지해야합니다. 이름이 같은 경우 날짜가 정렬을 정의합니다. dateTurn 함수는 날짜를 바꿔서 완벽하게 작동합니다.하스켈에서 정렬 된 목록에 새 항목 만들기
type Lastname = String
type Firstname = String
dateTurn :: (Int, Int, Int) -> (Int, Int, Int)
dateTurn (a,b,c) = (c,b,a)
new :: ((Lastname,Firstname),(Int,Int,Int)) -> [((Lastname,Firstname),(Int,Int,Int))] -> [((Lastname,Firstname),(Int,Int,Int))]
new x [] = [x]
new x (y:ys)
|(fst x)<(fst y) = x:(y:ys)
|(fst x)>(fst y) = y: (new x ys)
|(fst x)==(fst y) = if (dateTurn (snd x))<(dateTurn (snd y)) then y: (new x ys) else (x:y:ys)
스크립트를 컴파일하는 중 오류가 없습니다. 사람 목록을 빈 목록에 추가하면 제대로 작동합니다. 그러나 비어 있지 않은 목록에 추가하면. 프로그램이 작동을 멈추지 않으면 작동을 멈추기 위해 중단해야합니다. 그래서 어떻게이 문제를 해결할 수 있습니까? 당신이 조작
작품에 대한 예를 당신의 유형을. 문제를 일으키는 코드를 표시하십시오. –
BTW, 튜플에 관계 연산자를 사용하고 있다는 사실을 알고 있습니까? 당신이 정말로하고 싶은 것이 아닐 수도 있습니다. –
나는 열심히 실패했다. 내 코드를 복사하여 오펠을 발견했습니다. Dunno 왜 내가 지난 2 일 동안 그것을 찾지 못했을 까 ... ... : D – SiXa