Overview Analisis Rekurens

dokumen-dokumen yang mirip
Type Rekursif : List LIST OF LIST

Tipe Rekursif: POHON (TREE)

D I K T A T L I S P Oleh : Sri Purwanti

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

Bahasa Pemrograman :: Pemrograman List

Pohon Biner (Bagian 1)

Type. Type adalah himpunan nilai dan sekumpulan operator yang terdefinisi terhadap type tersebut

List Linier (Bag. I) IF2121/Algoritma dan Struktur Data Sem. I 2016/ /25/2017 IF2121/Sem I 2017/2018 1

DATA KOMPUTASI & SISTEM BILANGAN

Implementasi Skema Pohon Biner yang Persistent dalam Pemrograman Fungsional

Pemrograman Fungsional FAJAR SAPTONO, ST

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

LIST LINIER 1. DEFINISI

BAB III ANALISIS. Mekanisme Penyimpanan dan Pengambilan Sequence

Array (Tabel) Tim Pengajar KU1071 Sem /11/3 TW/KU1071 1

List Linier. IF2030/Algoritma dan Struktur Data. 11/6/2009 FNA+WDS/IF2030/Sem

MODUL PRAKTIKUM PERCABANGAN DAN PENGULANGAN

Pemrograman Prosedural FUNGSI (Subprogram) Tim Pengajar KU1071 Sem

IKG2A3/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Mesin Abstrak

Pendahuluan Struktur Data. Nisa ul Hafidhoh

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

Variabel dan Tipe data Javascript

Mesin Karakter dan Mesin Kata

PENGULANGAN SKEMA PEMROSESAN SEKUENSIAL. Tim Pengajar KU1071 Sem

Pohon Biner. Tim Pengajar IF2030 Semester I/ /8/2009 FNA/IF2030/Sem

Representasi Logic List Linier

Struktur Program. Rinta Kridalukmana

CCH1A4 / Dasar Algoritma & Pemrogramanan

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

{ Kamus Umum } constant IdxMax : integer = 100 constant IdxMin : integer = 1 constant IdxUndef : integer = -999 { indeks tak terdefinisi}

Array dan Matriks. IF2121 / Algoritma dan Struktur Data Sem / /7/2017 IF2121/sem /2018 1

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

Pencarian pada Array. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

LATIHAN UTS Tim Pengajar KU1071 Sem

HARGA & EKSPRESI Input dan Output

FUNGSI. {deretan instruksi algoritmik : pemberian harga, input, output, analisa kasus, pengulangan)

TYPE. Inggriani Liem : Catatan Kuliah Algoritma & Pemrograman, Jurusan teknik Informatika - ITB TYPE.doc/TYPE- 21/08/03 16:04

MODUL PRAKTIKUM STRUKTUR DATA Modul ke-1, Pertemuan ke-1 Nama file : P01-XXX (XXX adalah 3 digit terakhir NIM) Deskripsi: Senarai, Traversal

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

CCH1A4 / Dasar Algoritma & Pemrogramanan

Optimalisasi Algoritma Pencarian Data Memanfaatkan Pohon Biner Terurut

BAB II STACK (TUMPUKAN)

Paradigma Functional BAHASA PEMROGRAMAN. TIM PENGAJAR PEMROGRAMAN Departemen Ilmu Komputer IPB

Pengenalan Algoritma & Struktur Data. Pertemuan ke-1

Type Data terdiri dari : - Data Tunggal : Integer, Real, Boolean dan Karakter. - Data Majemuk : String

Struktur Data. Queue (Antrian)

Algoritma dan Pemrograman Searching/Pencarian

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

Aturan Penulisan Algoritma Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu : Judul (Header) Kamus Algoritma

PENGANTAR KOMPUTER DAN TEKNOLOGI INFORMASI 1A

Pohon Biner Bagian 2 (Pohon Seimbang, Pohon Biner Terurut, Pembangunan Pohon Biner dari Pita Karakter/String)

Bagian I. Studi Kasus [82] Tanda tangan:

MATRIKS. Dapat disimpan secara linier dan kontigu dengan dua alternatif sebagai berikut : a. Per baris

PENCARIAN SOLUSI TTS ANGKA DENGAN ALGORITMA RUNUT BALIK BESERTA PENGEMBANGANNYA

BAB 1 PENGANTAR KE STRUKTUR DATA

CCH1A4 / Dasar Algoritma & Pemrogramanan

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

Bab 7 Komponen Dasar Visual Basic 29 BAB VII KOMPONEN DASAR VISUAL BASIC TUJUAN PRAKTIKUM

>>> type ("5") <'type string'> >>> a= Belajar Python >>> type a <'type string'> AP2B Dini Triasanti Struktur Pemrograman Python (Bagian 2)

Bab 3. Decision 1 (Pengambilan Keputusan)

Dasar Komputer dan Pemrograman. Konsep Tipe Data dan Operator Nama dan Nilai Data

Integer (Bilangan Bulat) Yang dimaksud bilangan bulat adalah, -1, -2, -3, 0, 1, 2, 3, 4 dan lain lain yang bukan merupakan bilangan pecahan.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Prosedur dan Fungsi ALGORITMA DAN PEMROGRAMAN [IS ] Dosen: Yudha Saintika, S.T., M.T.I

IKG2A3/ Pemrograman Terstruktur 2

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

1. Inggriani Liem Catatan Kuliah Algoritma & Pemrograman, Jurusan Teknik Informatika ITB

PENGAKSESAN DAUN SECARA RANDOM PADA HASH TREE

DASAR PEMROGRAMAN. Institut Teknologi Sumatera

ANALISA KASUS Ekspresi Kondisional

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

OPERASI LOGIKA PADA GENERAL TREE MENGGUNAKAN FUNGSI REKURSIF

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

Aplikasi Rekursif dalam Analisis Sintaks Program

Pemrograman Dasar M E T H O D / F U N G S I

Tipe Data dan Operator dalam Pemrograman

PENCARIAN BERUNTUN (SEQUENTIAL SEARCHING)

BAB XI Manipulasi Binary Tree

Saifoe El Unas 2. Free Format

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

DIKTAT KULIAH STRUKTUR DATA. Disusun oleh: Sri Primaini A.

Algoritma dan Struktur Data STACK

Chapter 2. Tipe Data dan Variabel

CCH1A4 / Dasar Algoritma & Pemrogramanan

STACK (TUMPUKAN) Tumpukan uang koin Tumpukan kotak Tumpukan Buku. Gambar 1. Macam-macam tumpukan

BAB 3 STACK (TUMPUKAN)

BAB-2 : TIPE DATA, VARIABEL DAN OPERATOR

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Queue (Antrian)

& PEMROGRAMAN. Alex De Kweldju, S.Kom D3 Teknik Komputer Fakultas Teknik Universitas Negeri Papua

Sebelum kita membahas tentang Microsoft Access ada baiknya jika kita terlebih dahulu mengetahui apa yang dimaksud dengan database.

BAB II STACK Atau TUMPUKAN

QUEUE (ANTRIAN) Struktur Data - Queue

Struktur Data Array. Rijal Fadilah S.Si

Algoritma Pemrograman [BS204]

Algoritma Perulangan. Kuliah algoritma dan pemrograman

Kode MK/ Pemrograman Terstruktur 2. ZK Abdurahman Baizal. KK Algoritma dan Komputasi. Stack (Tumpukan)

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

STRUKTUR DATA. Pengajar. Jaidan Jauhari, M.T. Alamat

PHP (HYPERTEXT PREPROCESSOR)

Transkripsi:

Tipe Rekursif: LIST

Tujuan Mahasiswa memahami definisi type rekursif dan rekurens list Berdasarkan definisi yang dipahaminya, mahasiswa mampu membuat ekspresi rekursif untuk manipulasi List Mahasiswa mampu mengimplementasi fungsi pemroses list dalam LISP melalui praktikum

Overview Analisis Rekurens

Overview Analisis Rekurens Definisi entitas (type, fungsi) disebut rekursif jika definisi tersebut mengandung terminologi dirinya sendiri (diktat hal 53) Ekspresi rekursif direalisasikan dengan membuat fungsi rekursif dan didasari analisis rekurens

Analisis Rekurens Teks program rekursif terdiri dari dua bagian: Basis (Basis-0 atau Basis-1), yang menyebabkan prosedur/fungsi berhenti Bagianrekurens : mengandung call terhadap prosedur/fungsi tersebut (aplikasi dari fungsi), dengan parameter bernilai mengecil (menuju basis). Tulislah secara eksplisit dalam teks program anda: mana bagian basis, mana rekurens

Basis Nol atau Satu? Jika menangani kasus kosong, maka gunakan basis-0. Karena kosong adalah ciptaan kita, maka hati-hati dengan nilai yang dihasilkan oleh kasus kosong. Jika persoalan hanya ada artinya kalau tidak kosong, maka harus memakai basis 1. Contoh: mencari nilai maksimum dari sebuah list tidak bisa menggunakan basis kosong karena pada tabel kosong, nilai maksimum tidak terdefinisi.

Type Rekursif 2009/9/4 IF2030/Sem. 1 2009-2010 7

Type Rekursif Type rekursif : Jika teks yang mendefinisikan tipe mengandung referensi terhadap diri sendiri, maka disebut tipe rekursif. Tipe dibentuk dengan komponen yang merupakan tipe itu sendiri. (diktat fungsional hal 54-55)

Contoh Type Rekursif: Bilangan Integer bilangan integer Basis : 0 adalah bilangan integer Rekurens: if x adalah bilangan integer then x+1 adalah bilangan integer bilangan integer ganjil Basis : 1 adalah bilangan integer ganjil Rekurens: if x adalah bilangan integer ganjil then x + 2 adalah bilangan integer ganjil

Contoh type rekursif List List kosong adalah list List tidak kosong Elemen Sisanya adalah list Pohon Pohon biner kosong adalah Pohon biner Pohon biner tidak kosong Akar SubPohon kiri adalah pohon biner SubPohon kanan adalah pohon biner

List 2009/9/4 IF2030/Sem. 1 2009-2010 11

Definisi List e 1 e 2 e 3 e 4 e 5 e n Elemen pertama List adalah sekumpulan elemen yg bertipe sama; disebut juga sequence atau series Tipe rekursif Sisa list Basis 0: list kosong adalah sebuah list Rekurens: list terdiri dari sebuah elemen dan sublist (sublist juga bertipe list)

LIST dlm Kehidupan Sehari-hari Dalam kehidupan sehari-hari, list merepresentasi: Teks (list of kata) Kata (list of huruf) Sequential file (list of record) Table (list of elemen tabel, cth utk tabel integer: list of integer) List of atom simbolik (dalam LISP)

LIST dlm Dunia Pemrograman Dalam dunia pemrograman Antarmuka basis grafis (GUI): list of windows, list of menu items, list of buttons, list of icons Program editor gambar: list of figures Program pengelola sarana presentasi: list of slides Program pengelola spreadsheet: list of worksheets, list of cells Sistem operasi: list of terminals, list of jobs

JENIS LIST LIST dg elemen sederhana LIST dg elemen bilangan integer LIST dg elemen karakter (teks) LIST dg elemen type bentukan, cth: list of point LIST dg elemen list (disebut list of list)

LIST dg ELEMEN SEDERHANA

Definisi rekursif Basis 0: list kosong adalah sebuah list Rekurens: list dapat dibentuk dengan menambahkan elemen pada list (konstruktor), atau terdiri dari sebuah elemen dan sisanya adalah list (selektor) Elemen list: dapat berupa type dasar (integer, character, dll) dan type bentukan (Point, Jam, dll)

DEFINISI & SPESIFIKASI LIST TypeList: [ ] atau [ e o List] e List List TypeList: [ ] atau [List e] List e List

KONSTRUKTOR Konso : elemen, List List e List List Elemen baru Konso (5,[1,3,6,7]) [5,1,3,6,7] Kons : List, elemen List List List lama List lama Kons ([1,3,6,7],5) [1,3,6,7,5] e Elemen baru List baru List List baru

SELEKTOR FirstElmt: List tidak kosong elemen FirstElmt e List FirstElmt([5,1,3,6,7]) = 5 Tail: List tidak kosong list e List Tail([5,1,3,6,7]) = [1,3,6,7] Tail

SELEKTOR LastElmt: List tidak kosong elemen List e LastElmt LastElmt([5,1,3,6,7]) = 7 Head: List tidak kosong list Head List Head([5,1,3,6,7]) = [5,1,3,6] e

PREDIKAT DASAR {Basis 0} IsEmpty: List boolean {benar jika list kosong [ ] } {Basis 1} IsOneElmt: List boolean {benar jika list hanya berisi 1 element [e]}

Menghitung banyaknya elemen (NbElmt(L), hal 68) NbElmt: List integer Catatan: dengan Konso (FirstElmt dan Tail) Cth: NbElmt([ ]) = 0; NbElmt([a, b, c]) = 3 Rekursif Basis 0: list kosong, NbElmt = 0 Rekurens: NbElmt = 1 + NbElmt(Tail(L)) Realisasi NbElmt(L): if IsEmpty(L) then {Basis 0} 0 else {rekurens} 1 + NbElmt(Tail(L))

Mengecek keanggotaan sebuah elemen (IsMember(x,L)), hal 68-69 Fungsi IsMember(x,L): mengecek apakah x adalah member dari L IsMember: elemen, List boolean {Benar jika x adalah elemen dari L} IsMember(x,[ ])=false; IsMember(x,[a,b,c])=false; IsMember(b,[a,b,c])=true

IsMember(x,L) Rekursif Basis: jika list kosong maka nilai keluaran (output) adalah false {basis 0} Rekurens Jika nilai elemen pertama (atau terakhir) dari list adalah x, maka output adalah true. Tapi jika bukan x, maka tail (atau head) harus dicek.

Realisasi IsMember(x,L) Dgn Konso IsMember(x,L): if IsEmpty(L) then {Basis 0} false else {rekurens} if FirstElmt(L)=x then true else IsMember(x,Tail(L)) Dgn Kons IsMember(x,L): if IsEmpty(L) then {Basis 0} false else {rekurens} if LastElmt(L)=x then true else IsMember(x,Head(L))

Menyalin (copy) list, hal 69 Proses mengambil satu persatu elemen dari List sumber dan membuat elemen baru untuk List target hasil copy Copy: List List Cth: Copy([ ]) = [ ]; Copy([a,b,c]) = [a,b,c] Rekursif Basis: IsEmpty(L) memberi list kosong [ ] Rekurens: mengambil elemen pertama list sumber kemudian memasukkannya sebagai elemen pertama list target ATAU mengambil elemen terakhir dari list sumber kemudian memasukkannya sebagai elemen terakhir list target Copy(L): if IsEmpty(L) then {Basis 0} [ ] else {rekurens} Konso(FirstElmt(L),Copy(Tail(L))) Kons (Copy(Head(L)),LastElmt(L)) ATAU

Mengecek apakah 2 list sama atau tidak, IsEqual, hal 70 IsEqual: 2 List boolean Cth: IsEqual([ ],[ ])=true IsEqual([ ],[a])=false IsEqual([a],[ ])=false IsEqual([a,b,c],[a,b,c])=true Rekursif Basis: Jika dua2nya kosong maka true, jika hanya salah satu kosong maka false Rekurens: Cek elemen pertama dari kedua list dan kemudian cek tail kedua list tersebut ATAU cek elemen terakhir dari kedua list dan kemudian cek head kedua list

IsEqual(L1,L2) IsEqual(L1,L2): depend on L1,L2 IsEmpty(L1) and isempty(l2): true {basis} IsEmpty(L1) and not isempty(l2): false {basis} not IsEmpty(L1) and isempty(l2): false {basis} not IsEmpty(L1) and not isempty(l2): {rekurens} ( (FirstElmt(L1) = FirstElmt(L2)) and then IsEqual (Tail(L1),Tail(L2)) ) if (FirstElmt(L1) = FirstElmt(L2)) then IsEqual (Tail(L1),Tail(L2)) else false 29

Menggabung (konkatenasi) 2 List, hal 72 Konkat: 2 List List Cth: Konkat([ ],[ ])=[ ]; Konkat([a],[b,c])=[a,b,c] Rekursif terhadap L1 Basis 0: L1 adl. list kosong, maka output adl. L2 Rekurens: mengambil elemen pertama dari L1 dan menggabungkannya dengan concat terhadap Tail(L1) dan L2. Konkat(L1,L2): if IsEmpty(L1) then {basis} L2 else {rekurens} Konso(FirstElmt(L1), Konkat(Tail(L1),L2))

Ambil elemen ke-n, hal 71 ElmtKeN: integer >= 1, List tdk kosong elemen Cth: ElmtKeN(0,[ ]) tidak terdefinisi, karena dalam spek, list input harus tidak kosong ElmtKeN(1,[a,b,c]) = a Rekurens dilakukan terhadap N (dikurangi 1, fungsi prec) dan List (diambil tail-nya) ElmtKeN(N,L): if N=1 then {basis 1} FirstElmt(L) else {rekurens} ElmtKeN( prec(n), Tail(L) )

Apakah X adalah elemen ke N?, hal 73-74 IsXElmtkeN: elemen, integer, list boolean Cara 1 (Rekursif): Basis 0: N=1, dan kemudian mengecek apakah FirstElmt(L)=X Rekurens: N dikurangi 1, X tetap dan L diambil Tail-nya Cara 2: Menggunakan fungsi antara ElmtKeN(N,L), mengecek apakah ElmtKeN(N,L) = X?

LIST of INTEGER

Definisi Rekursif Basis 0: List kosong Rekurens: list bilangan integer dibuat dengan cara menambahkan sebuah integer pada list bilangan integer 5 10 13 18 20 100 First Element Tail (berupa list)

List of Integer List of Integer adalah list yang elemennya berupa integer Element List of elemen Integer List of integer Contoh Konso(elemen,list) list {untuk list of elemen} Konso(integer,list of integer) list of integer {untuk list of integer}

Nilai Maksimum (Hal 80) Fungsi menghasilkan elemen bernilai maksimum dari list bilangan integer maxlist: List of integer tidak kosong integer Rekursif Basis (Basis 1): jika elemen list berjumlah satu maka ambil nilai terakhir dari list. Basis 1 digunakan karena jika list kosong maka nilai maksimum tidak terdefinisi Rekurens: membandingkan nilai elemen terakhir list dengan nilai maksimum dari head list maxlist(li): if IsOneElmt(Li) then {Basis 1} LastElmt(Li) else {rekurens} max2(lastelmt(li),maxlist(head(li)))

Penjumlahan Dua List Integer (Hal 82) Fungsinya menjumlahkan dua list integer yang hasilnya disimpan dalam satu list integer. Asumsi: kedua list input memiliki dimensi (jumlah elemen) yang sama. Listplus: 2 List of integer 0 List of integer 0 Rekursif Basis (Basis 0): Jika list kosong maka list output adalah [ ] Rekurens: mengambil elemen pertama dari kedua list, menjumlahkan kedua elemen tadi kemudian memasukkannya sebagai elemen pertama dari list output Listplus(Li1,Li2): if IsEmpty(Li) then {Basis 0} [ ] else {rekurens} Konso (FirstElmt(Li1)+FirstElmt(Li2), Listplus(Tail(Li1),Tail(Li2)))

Kemunculan Nilai Maks (Hal 84) Fungsi menghasilkan nilai maksimum dan jumlah kemunculan nilai maksimum tsb pd list bilangan integer maxnb: List of integer <integer,integer> Cth: maxnb([11,3,4,5,11,6,11])= <11,3> Rekursif Basis (Basis 1): List dgn satu elemen e menghasilkan <e,1> Rekurens: e Tail(Li) Nilai maks: m; Jumlah kemunculan: n Jika m adalah nilai maksimum dari Tail(Li) dan n adalah jumlah kemunculan m pada Tail(Li) maka ketika memeriksa e, ada 3 kemungkinan: m < e: nilai maksimum diganti yang baru (m e), n=1 m = e: nilai maksimum tetap m, nilai kemunculan n ditambah 1 m > e: nilai maksimum tetap m, nilai kemunculan tetap n

Kemunculan Nilai Maks (Hal 84) MaxNb(Li): {menghasilkan nilai maks dan kemunculannya} if IsOneElmt(Li) then {basis 1} <FirstElmt(Li), 1> else {rekurens} let <m,n> = MaxNb(Tail(Li)) in depend on m, FirstElmt(Li) m < FirstElmt(Li): <FirstElmt(Li), 1> m = FirstElmt(Li): <m,1+n> m > FirstElmt(Li): <m,n>

LIST of CHARACTER (TEKS)

Definisi Rekursif Basis 0: teks kosong adalah teks Rekurens: teks dapat dibuat dengan cara menambahkan sebuah karakter pada teks a d E Z 0 9 First Element Tail (berupa list)

List of Character List of Character adalah list yang elemennya berupa character Element List of elemen Character Text {list of character} Contoh Konso(elemen,list) list {untuk list of elemen} Konso(character,text) text {untuk list of character}

Hitung A, hal 76 Nba: Teks integer >=0 Cth: Nba([ b, c, a, d, a, n, a ]) = 3 Rekursif Basis {basis 0}: teks kosong, output: 0 Rekurens: Periksa huruf pertama dari teks, jika a maka 1 ditambahkan dengan nilai kemunculan a pada tail, jika bukan a maka 0 ditambahkan dengan nilai kemunculan a pada tail Nba(T): if IsEmpty(T) then {Basis 0} 0 else {rekurens} (if (FirstElmt(T) = a ) then 1 else 0) + Nba(Tail(T))

List of type bentukan 2009/9/4 IF2030/Sem. 1 2009-2010 44

Definisi Rekursif Basis 0: List kosong Rekurens: list of type bentukan dibuat dengan cara menambahkan sebuah elemen bertype bentukan pada list of type bentukan Contoh: list of point <-1,-2> <3,4> <6,8> <10,14> <20,40> First Element Tail (berupa list)

List of Type Bentukan List of type bentukan adalah list yang elemennya berupa type bentukan Element List of elemen Type bentukan List of type bentukan Contoh Konso(elemen,list) list {untuk list of elemen} Konso(type bentukan,list of type bentukan) list of type bentukan {untuk list of type bentukan} Konso(point,list of point) list of point {untuk list of point}

Pada dasarnya semua jenis list dikelola dengan cara yang sama Menghitung kemunculan sebuah elemen pada list List of integer NbXInt: integer, List of integer integer List of character NbC: character, Teks integer (diktat hlm.77) List of Point NbPoint: Point, List of Point integer

Menghitung Kemunculan X Rekurens Basis: untuk list kosong, kemunculan adalah 0 Rekurens: dicek apakah elemen pertama adalah X, jika iya maka nilai 1 ditambahkan pada hasil penghitungan kemunculan X pada tail dari list, jika tidak maka nilai 0 yang ditambahkan NbX(X,L): if IsEmpty(L) then {Basis 0} 0 else {rekurens} (if (FirstElmt(L) = X) then 1 else 0) + NbX(Tail(L))

List of Elemen NbX(X,L): if IsEmpty(L) then {Basis 0} 0 else {rekurens} (if (FirstElmt(L) = X) then 1 else 0) + NbX(X,Tail(L)) List of Integer NbXInt(Xi,Li): if IsEmpty(Li) then {Basis 0} 0 else {rekurens} (if (FirstElmt(Li) = Xi) then 1 else 0) + NbXi(Xi,Tail(Li)) List of Character NbC(C,T): if IsEmpty(T) then {Basis 0} 0 else {rekurens} (if (FirstChar(T) = C) then 1 else 0) + NbC(C,Tail(T)) List of Point NbPoint(P,Lp): if IsEmpty(Lp) then {Basis 0} 0 else {rekurens} (if (FirstElmt(Lp) = P) then 1 else 0) + NbPoint(P,Tail(Lp))

TRANSLASI KE LISP

List dalam LISP List adalah tipe dasar yang disediakan LISP Fungsi manipulasi list pada LISP: Konstruktor: list, cons, append Selektor: car, cdr Predikat: atom, listp, null, equal

Konso (defun Konso (e L) (cons e L)) Konstruktor Kons (defun Kons (e L) (Inverse (cons e (Inverse L))))

Selektor (defun FirstElmt (L) (car L)) (defun Tail (L) (cdr L)) (defun LastElmt (L) (car (Inverse L))) (defun Head (L) (Inverse (cdr (Inverse L))) )

Predikat (defun IsEmpty(L) (null L)) (defun IsOneElmt(L) (and (not (IsEmpty L)) (IsEmpty (cdr L)))) (defun IsMember (X L) (if (IsEmpty L) nil ; basis 0 (if (equal X (FirstElmt L)) t ; recc (IsMember X (Tail L)) ) ) )

Fungsi Lain (defun NbElmt(L) (length L)) (defun Konkat(L1 L2) (append L1 L2)) (defun Inverse (L) (reverse L)) (defun Max(L) (if (IsOneElmt L) (FirstElmt L) ;basis 1 (max2 (FirstElmt L) (Max (Tail L))) ;recc ) )

Pekerjaan Rumah Translasikan dalam bentuk LISP, fungsifungsi yang telah dijelaskan dalam kuliah Selamat Belajar