1
我想設計使用尾遞歸和插入第一順序編程哈斯克爾的算法排序插入排序使用尾遞歸與一次函數
我想出了這個解決方案
isort :: Ord a => [a] -> [a]
isort [] = []
isort [x] = [x]
isort (x:xs) = insert (isort xs)
where insert [] = [x]
insert (y:ys)
| x < y = x : y : ys
| otherwise = y : insert ys
但我不確定它是否使用一階和尾遞歸。
有人能想出了使用的替代解決方案
- 尾遞歸
- 第一順序編程
感謝,
這不使用尾遞歸。 'insert'的'otherwise'子句是'y:insert ys'(更清楚地寫成'(:) y(insert ys)'),對'insert'的調用作爲參數顯示爲'(:)',而不是在尾部位置 –
你能解釋一下「一階編程」是什麼意思嗎?這只是一些沒有把功能當作論據的東西。 – Lazersmoke
@Lazersmoke確實如此。 –