이 꼬리 재귀를 사용하지 않고, 간단한 버전도 HOF
sort :: Ord a => [a] -> [a]
sort [] = []
sort [x] = [x]
sort (x:xs) = insert x (sort xs)
insert :: Ord a => a -> [a] -> [a]
insert x [] = [x]
insert x (y:ys) | x < y = x:y:ys
| otherwise = y:insert x ys
,210
당신은 우리가 꼬리 재귀를 사용하여 정렬을 다시 할 수있는 축적, 추가 할 수 있습니다
sort' :: Ord a => [a] -> [a]
sort' xs = sortAcc xs []
sortAcc :: Ord a => [a] -> [a] -> [a]
sortAcc [] acc = acc
sortAcc (x:xs) acc = sortAcc xs (insert x acc)
insert
이 예쁜 멋지게 인 방법을 정의를; 그러나 다만 고차 함수를 사용하는 목적 , 우리는 그것을 좋아 정의 할 수 있습니다 : 섹션 (<x)
이 span
에 전달 형 Ord a => a -> Bool
의 함수이다
insert' :: Ord a => a -> [a] -> [a]
insert' x xs = menores ++ x:mayores
where (menores,mayores) = span (<x) xs
.
꼬리 재귀를 사용하지 않습니다. 'insert :'('ys (insert ys)'로보다 명확하게 쓰여져있다.)'insert :'의'otherwise' 절은'y : insert ys'이다. 꼬리 위치에 –
"1 차 프로그래밍"이란 무엇을 의미 할 수 있습니까? 그것은 인수로서의 기능을하지 않는 것입니다. – Lazersmoke
@Lazersmoke 네, 정확하게 요. –