LaporanPraktikum (Minggu-5) (11S22038)
LaporanPraktikum (Minggu-5) (11S22038)
NIM : 11S22038
Nama : Yizreel Schwartz Sipahutar
Kelas : 11IF2
Video Source Code : https://youtu.be/gZihPjsQi4c
Tantangan Praktikum :
Buatlah tipe bentukan Date, tipe ini terdiri dari hari (dd), bulan (mm), dan tahun (yy). Dalam
laporan source code dan laporan praktikum ini, untuk nama fungsi utama yang diperlukan
seperti hari, bulan, dan tahun akan diganti menjadi day, month, dan year. Contoh tipe
bentukan Date yang berisi hari, bulan, dan tanggal adalah seperti berikut (1 1 2023).
1. Konstruktor
makeDate(dd, mm, yy), untuk membentuk Date, dari day (dd), month (mm), dan year (yy).
Konstruktor
DEFINISI DAN SPESIFIKASI TYPE
type Date: (day : integer >0 and integer < 32
month : integer >0 and integer < 13,
year : integer > 0)
{ day, month, dan year adalah hari, bulan, dan tahun yang ketiga-tiganya merupakan
integer dengan ketentuan yang telah dituliskan dalam type diatas}
1. Konstruktor
APLIKASI
⇒ (makeDate 1 11 1980)
(1 11 1980)
⇒ (makeDate 10 9 1980)
(10 9 1980)
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
2. Selektor
Selektor berfungsi untuk memilih atau mengembalikan nilai dari day (dd), month (mm), year
(yy) yang dipilih. Dalam praktikum ini juga untuk penamaan parameter setiap elemen diganti
menjadi day (tanggal), month (bulan), dan year (tahun).
Selektor
DEFINISI DAN SPESIFIKASI SELEKTOR
day : ( integer > 0 and integer) < 32 → Date
{ day (tanggal) berfungsi untuk mengembalikan nilai dari day dari bentukan Date yang
sudah ada }
month : (integer > 0 and integer) < 13→ Date
{ month (bulan) berfungsi untuk mengembalikan nilai dari month dari bentukan Date
yang sudah ada }
year : (integer > 0) → Date
{year (tahun) berfungsi untuk mengembalikan nilai dari year dari bentukan Date yang
sudah ada }
REALISASI
day (tanggal) = car (tanggal)
month (bulan) = car (cdr bulan))
year (tahun) = car (cdr (cdr tahun))
(defun Month(bulan)
(car (cdr bulan))
)
(defun Year(tahun)
(car (cdr (cdr tahun)))
)
APLIKASI
⇒ (day (makeDate 1 2 2020))
1
⇒ (month (makeDate 1 2 2020))
2
⇒ (year (makeDate 1 2 2020))
2020
⇒ (day (makeDate 5 10 2999))
5
⇒ (year (makeDate 5 10 2999))
2999
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
3. Operator : nextDay(tanggal)
Operator berfungsi untuk menentukan hari berikutnya ataupun hari sebelumnya dari suatu
tipe bentukan date yang sudah dibuat sebelumnya dengan memperhatikan aturan hari yang
berlaku dalam setiap tahun sesuai dengan kalender masehi yang kita gunakan sehari-hari.
Operator : nextDay(tanggal)
DEFINISI DAN SPESIFIKASI OPERATOR : nextDay (tanggal)
nextDay : Date → Date
{ nextDay (tanggal) adalah fungsi yang bertujuan untuk menentukan satu hari
berikutnya setelah hari dari Date yang dibentuk dengan memperhatikan setiap aturan
tanggal yang terdapat dalam kalender }
REALISASI
nextDay (tanggal) :
depend on
((akhirbulan tanggal) and (not (akhirtahun tanggal))) :
(list 1 ((month tanggal) + 1) (year tanggal))
((akhitahun tanggal) : (list 1 1 ((year tanggal) + 1))
else
(list ((day tanggal) + 1) (month tanggal) (year tanggal))
3. Operator : nextDay(tanggal)
APLIKASI
⇒ (nextDay t1)
(2 1 2000)
⇒ (nextDay t2)
(2 3 2004)
⇒ (nextDay t3)
(1 2 2010)
⇒ (nextDay t4)
(1 1 2001)
⇒ (nextDay t5)
(1 3 2004)
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
3. Operator : yesterDay(tanggal)
Operator berfungsi untuk menentukan hari berikutnya ataupun hari sebelumnya dari suatu
tipe bentukan date yang sudah dibuat sebelumnya dengan memperhatikan aturan hari yang
berlaku dalam setiap tahun sesuai dengan kalender masehi yang kita gunakan sehari-hari.
Operator : yesterDay(tanggal)
DEFINISI DAN SPESIFIKASI OPERATOR : yesterDay (tanggal)
yesterDay : Date → Date
{ yesterDay (tanggal) adalah fungsi yang bertujuan untuk menentukan satu hari
sebelum hari dari Date yang dibentuk dengan memperhatikan setiap aturan tanggal yang
terdapat dalam kalender }
REALISASI
yesterDay (tanggal) :
let
(day (day tanggal))
(month (month tanggal))
(year (year tanggal))
depend on
((awalbulan tanggal) and (day = 1) and (month = 1)) :
(list 31 12 ((year tanggal) – 1))
((awalbulan tanggal) and (day = 1) :
(list (year (list 1 (month – 1) akhirhari)) year (month – 1))
else
(list (day - 1) (month year))
3. Operator : yesterDay(tanggal)
APLIKASI
⇒ (yesterDay t1)
(31 12 1999)
⇒ (yesterDay t2)
(29 2 2004)
⇒ (yesterDay t3)
(30 1 2010)
⇒ (yesterDay t4)
(30 12 2000)
⇒ (yesterDay t5)
(28 2 2004)
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
REALISASI
isEqD (D1, D2) :
(day D1 = day D2)
and
(month D1 = month D2)
and
(year D1 = year D2)
isBefore
DEFINISI DAN SPESIFIKASI PREDIKAT
isbefore : Date → boolean
{ isbefore (D1 D2) adalah fungsi untuk membandingkan dua buah date dimana Date D1
harus memiliki nilai yang lebih kecil dari Date D2 untuk menunjukkan Date D1 adalah
sebelum Date D2 }
REALISASI
isbefore (D1, D2) :
newcent (tanggal)
newcent : year → boolean
{ fungsi ini bertujuan untuk menentukan year (tahun) apakah merupakan suatu abad baru
yang nantinya apabila tahun tersebut diketahui abad baru akan digunakan untuk
menentukan fungsi kabisat selanjutnya }
REALISASI LISP
(defun newcent (tanggal)
(cond
((= (mod (year tanggal) 100)0))
)
)
kabisat (tanggal)
kabisat : year → boolean
{ fungsi ini berfungsi untuk menentukan apakah year (tahun) dari suatu Date akan
memiliki nilai 0 apabila di modulo dengan empat apabila tahun tersebut bukan abad baru
dan apabila di modulo dengan empat ratus juga akan menghasilkan nol apabila tahun
tersebut merupakan abad baru }
REALISASI LISP
(defun kabisat (tanggal)
(cond
((and (not (newcent tanggal))(= (mod (year tanggal) 4) 0)))
((and (newcent tanggal)(= (mod (year tanggal) 400) 0)))
)
)
MoDay28 (tanggal)
MoDay28 : month → boolean
{ fungsi ini bertujuan untuk menandakan hari terkahir dalam bulan februari ketika tahun
bukan kabisat }
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
MoDay29 (tanggal)
MoDay29 : month → boolean
{ fungsi ini bertujuan untuk menandakan hari terkahir dalam bulan februari ketika tahun
adalah kabisat }
REALISASI LISP
(defun MoDay29(tanggal)
(cond
((and (= (Month tanggal) 2))(kabisat tanggal))
)
)
MoDay30 (tanggal)
MoDay30 : month → boolean
{ fungsi ini bertujuan untuk menandakan bulan berapa saja yang memiliki jumlah hari
sebanyak 30 hari }
REALISASI LISP
(defun MoDay30(tanggal)
(cond
((= (month tanggal) 4))
((= (month tanggal) 6))
((= (month tanggal) 9))
((= (month tanggal) 11))
)
)
MoDay31 (tanggal)
MoDay31 : month → boolean
{ fungsi ini bertujuan untuk menandakan bulan berapa saja yang memiliki jumlah hari
sebanyak 31 hari }
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
akhirbulan (tanggal)
akhirbulan : month → boolean
{ fungsi ini bertujuan untuk menandakan hari terakhir dari setiap bulan yang terdapat
dalam 12 bulan kalender }
REALISASI LISP
(defun akhirbulan(tanggal)
(cond
((and (= (Day tanggal) 31)(MoDay31 tanggal)))
((and (= (Day tanggal) 30)(MoDay30 tanggal)))
((and (= (Day tanggal) 28)(not (kabisat tanggal))))
((and (= (Day tanggal) 29)(kabisat tanggal)))
)
)
akhirtahun (tanggal)
akhirtahun : year → boolean
{ fungsi ini bertujuan untuk menandakan hari terakhir dan bulan terakhir dalam 12 bulan
kalender }
REALISASI LISP
(cond
((and (= (Month tanggal) 12)(= (Day tanggal) 31)))
)
)
Praktikum5/11S22038-DasPro
LISP: Tipe Bentukan Date
REALISASI LISP
(defun awalbulan(tanggal)
(cond
((= (Day tanggal) 1))
)
)
awaltahun (tanggal)
awaltahun : year → boolean
{ fungsi ini bertujuan untuk menandakan hari pertama dan bulan pertama dalam year }
REALISASI LISP
(defun awaltahun(tanggal)
(cond
((and (awalbulan tanggal)(= (Day tanggal) 1)))
)
)
akhirhari (tanggal)
akhirhari : day → boolean
{ fungsi ini bertujuan untuk menandakan hari terakhir dari setiap bulan yang ada sesuai
dengan ketentuan kalender masehi }
REALISASI LISP
(defun akhirhari(tanggal)
(cond
((MoDay31 tanggal) 31)
((MoDay30 tanggal) 30)
((MoDay29 tanggal) 29)
((MoDay28 tanggal) 28)
)
)