我想在功能性編程方面做得很好,所以我爲自己設定了一些任務。整數列表中最長的子序列的長度
我想確定在整數列表,其中,下一個元件是遞增的最長子序列的長度。
所以結果應該是
incsubseq [] ~?= 0,
incsubseq [5] ~?= 1,
incsubseq [1,2,3,5,6] ~?= 3,
incsubseq [5,6,1,2,3] ~?= 3,
incsubseq [5,6,1,4,3] ~?= 2,
incsubseq [6,5,4,3,2,1] ~?= 1]
我的嘗試是這樣的:
incsubseq :: [Int] -> Int
incsubseq [] = 0
incsubseq [_] = 1
incsubseq (a:b)
| a == ((head b)-1) = 1 + (incsubseq b)
| a /= ((head b)-1) = (incsubseq b)
但當然這僅適用於列表沒有一個較長的序列如[1,2,3,42] = ,但不適用於像列表[1,2,]這應該是3,但是NOT(這是2)!
我真的很感激你的幫助,因爲這個問題讓我發瘋,來自OO編程。
謝謝,這是非常有益的! – HaskellDevNoob