Latihan Soal LISP


Mari kita coba latihan soal yukk..
Jangan menyerah kalau belum bisa, kita bisa karena kita mau usaha.
Check it out...


Asumsi dasar soal ini adalah anda sudah mengenal dan mempunyai predikat dasar seperti, CAR, First, CDR, Tail, Head, Last, IsGanjil, IsEmpty, IsOneElmt, IsLisp, IsAtom, IsNumber atau Numberp dan sebagainya.

Persoalan
Diketahui sebuah list yang mana anggota list berupa angka genap akan di jumlahkan dengan angka genap lainnya. Dan apabila ada angka ganjil, angka itu di abaikan.

Definisi dan spesifikasi fungsi adalah sebagai berikut :

SumGenap (L) : Integer à List
  
Petunjuk :

Perlu di perhatikan, disini terdapat pemeriksaan
; Basis 0   : Jika IsEmpty L maka selain itu
; Basis 1   : Jika IsGenap(n) maka (car L) + SumGenap (cdr L) selain itu
; Rekuren : SumGenap (cdr L)

Realisasi

(2 5 11 25 9 4 10) => 16
(13 2 6 22 18 55 20 4 1) => 72

-----------------------------------------------------------------

Jawaban

(defun IsEmpty(L)
   (null L)
)

(defun IsGenap(n)
   (if (= (mod n 2) 0) t nil )
)

(defun SumGenap(L)

   (if (IsEmpty L) 0
        (if (IsGenap (car L)) (+ (car L) (SumGenap (cdr L)))
             (SumGenap (cdr L))
        )
   )
)

-----------------------------------------------------------------

Kurang lebih demikian.
Jangan lupa membuat List pada saat compile di LISP.
=> (setq 'nama list'(list 'isi'))

Komentar