order p xs = as where (as, bs) = go xs bs [] go [] as bs = (as, bs) go (x:xs) as bs = if p x then go xs (x:as) bs else go xs as (x:bs)이렇게 하면 difference list 안해도 되고 리스트 중복생성도 없음 ㅇㅅㅇ
머하는 코드인데
predicate를 기준으로 리스트 정렬하는 건데 완전히 정렬되지는 않음
predicate 만족하는 건 앞으로 가고 만족 안하는 건 뒤로 가고 이게 전부임 ㅇㅇ
미래에 생성되는 값의 포인터를 가져오는거라고 생각하면 됨
C++같은것만 해서 그런가? 위에서 아래로 읽는게 힘드네ㅋㅋㅋㅋ
이건 하스켈 모르면 읽기 어려운 코드임
함수 정의나 :, where 이런건 끡쏘트 예제에서 봐서 저게 뭔말인지 알긴 하겠는데... 뭔가 아래에서 위로 읽어야 할것같은 느낌?? 아무튼 구경 잘함
함수 이름이 filter인게 맞지 않음 ㅇㅅㅇ?
함수이름은 대충 지은거긴 한데
order (>3) [1,3,2,6,5,4,2] = [4,5,6,2,2,3,1] 임
order p xs = uncurry (++) (partition p xs) 임
앗! 그러네 ㅈㅅ
아 각각 리스트 뒤집어짐 ㅋㅋㅋㅋ