-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathSplitPrak5.hs
79 lines (58 loc) · 2.24 KB
/
SplitPrak5.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
-- Definisi dan Spesifikasi
-- DEFINISI DAN SPESIFIKASI LIST
{- type List of Int: [ ] atau [e o List] atau [List o e]
Definisi type List of Int
Basis: List of Int kosong adalah list of Int
Rekurens:
List tidak kosong dibuat dengan menambahkan sebuah elemen bertype Int di awal
sebuah list atau
dibuat dengan menambahkan sebuah elemen bertype Int di akhir sebuah list -}
-- DEFINISI DAN SPESIFIKASI KONSTRUKTOR
konso :: Int -> [Int] -> [Int]
{- konso e li menghasilkan sebuah list of integer dari e (sebuah integer) dan li
(list of integer), dengan e sebagai elemen pertama: e o li -> li' -}
-- REALISASI
konso e li = [e] ++ li
konsDot :: [Int] -> Int -> [Int]
{- konsDot li e menghasilkan sebuah list of integer dari li (list of integer) dan
e (sebuah integer), dengan e sebagai elemen terakhir: li o e -> li' -}
-- REALISASI
konsDot li e = li ++ [e]
-- DEFINISI DAN SPESIFIKASI SELEKTOR
-- head :: [Int] -> Int
-- head l menghasilkan elemen pertama list l, l tidak kosong
-- tail :: [Int] -> [Int]
-- tail l menghasilkan list tanpa elemen pertama list l, l tidak kosong
-- last :: [Int] -> Int
-- last l menghasilkan elemen terakhir list l, l tidak kosong
-- init :: [Int] -> [Int]
-- init l menghasilkan list tanpa elemen terakhir list l, l tidak kosong
-- DEFINISI DAN SPESIFIKASI PREDIKAT
isEmpty :: [Int] -> Bool
-- isEmpty l true jika list of integer l kosong
-- REALISASI
isEmpty l = null l
isOneElmt :: [Int] -> Bool
-- isOneElmt l true jika list of integer l hanya mempunyai satu elemen
-- REALISASI
isOneElmt l = (length l) == 1
split :: [Int] -> ([Int],[Int],[Int])
listNeg :: [Int] -> [Int]
listPos :: [Int] -> [Int]
listOdd :: [Int] -> [Int]
split li = (listNeg li, listOdd li, listPos li)
listOdd li = if isEmpty li then []
else
if (mod (head li) 2 == 1) && head li > 0 then konso (head li) (listOdd (tail li))
else
listOdd (tail li)
listNeg li = if isEmpty li then []
else
if head li <= 0 then konso (head li) (listNeg (tail li))
else
listNeg (tail li)
listPos li = if isEmpty li then []
else
if head li > 0 && (mod (head li) 2) == 1 then konso (head li) (listPos (tail li))
else
listPos (tail li)