하스켈로 삽입 정렬 구현 질문드립니다.
글쓴이: cjscokdd / 작성시간: 일, 2015/04/26 - 9:24오후
하스켈을 배우고 있는 초보자입니다.
ghci환경에서 삽입정렬을 구현하기 위해,
우선 리스트에 오름차순 순서를 유지하며 삽입을 하는 함수 Insert를 구현하려고 하는데요
prelude> let insert x [] = x:[] insert :: t1 -> [t] -> [t1] prelude> let insert x (y:ys) = if x < y then x:y:ys else y : insert ys insert :: Ord a => a -> [a] -> [a]
와 같이 함수 선언을 하고 난 후에
Prelude> insert 1 []
와 같이 해보니 결과는 [1]
Prelude> insert 1 ([2,3])
와 같이 해보니 결과는 [1,2,3]로 잘 작동하였습니다.
(왜 두번째 리스트 매개변수에 괄호를 쳐야지만 작동하는지 모르겠습니다만,...)
그런데
Prelude>insert 4 ([1,2,3])
이와같이 입력을하니
[1,2,3*** Exception: :165:5-61: Non-exhaustive patterns in function
와 같은 오류가 발생합니다.
함수의 정의에 어떤 부분이 문제가 있었는지 잘 모르겠어서 도와주시면 감사하겠습니다.
Forums:
오류를 구글에서 검색해보니 비슷한 문제가 있었습니다.
[1,2,3*** Exception: :165:5-61: Non-exhaustive patterns in function
http://stackoverflow.com/questions/29877403/have-some-troubles-in-implementing-insertion-sort-function-in-haskell
하스켈 가볍게 맛보기
https://kldp.org/node/89458
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
interactive mode 사용으로 첫번째 정의가
interactive mode 사용으로 첫번째 정의가 사라진것입니다.
shint 님의 링크랑 완전 같은 질문이네요.
마지막에 insert x ys, x 가 빠졌습니다.
http://stackoverflow.com/questions/2846050/how-to-define-a-function-in-ghci-across-multiple-lines
let {insert x [] = x:[];insert x (y:ys) = if x < y then x:y:ys else y : insert x ys}
댓글 달기