From 54214ae0aaae3cb686ac84818ae23d16f72d186d Mon Sep 17 00:00:00 2001 From: Fabio Scotto di Santolo Date: Fri, 5 Sep 2025 11:59:55 +0200 Subject: [PATCH] Solution exercises from P01 to P07 --- p01.el | 9 +++++++++ p02.el | 9 +++++++++ p03.el | 9 +++++++++ p04.el | 10 ++++++++++ p05.el | 10 ++++++++++ p06.el | 7 +++++++ p07.el | 10 ++++++++++ 7 files changed, 64 insertions(+) create mode 100644 p01.el create mode 100644 p02.el create mode 100644 p03.el create mode 100644 p04.el create mode 100644 p05.el create mode 100644 p06.el create mode 100644 p07.el diff --git a/p01.el b/p01.el new file mode 100644 index 0000000..1dd2325 --- /dev/null +++ b/p01.el @@ -0,0 +1,9 @@ +;; P01 (*) Find the last box of a list +(defun my-last (lst) + (cond + ((eq lst '()) '()) + ((eq (cdr lst) '()) lst) + (t + (my-last (cdr lst))))) + +(my-last '(a b c d)) ; '(d) diff --git a/p02.el b/p02.el new file mode 100644 index 0000000..968cbfd --- /dev/null +++ b/p02.el @@ -0,0 +1,9 @@ +;; P02 (*) Find the last but one box of a list +(defun my-but-last (lst) + (cond + ((eq lst '()) '()) + ((eq (cddr lst) '()) lst) + (t + (my-but-last (cdr lst))))) + +(my-but-last '(a b c d)) ; '(c d) diff --git a/p03.el b/p03.el new file mode 100644 index 0000000..b17790d --- /dev/null +++ b/p03.el @@ -0,0 +1,9 @@ +;; P03 (*) Find the k'th element of a list +(defun element-at (lst k) + (cond + ((eq lst '()) '()) + ((eq k 1) (car lst)) + (t + (element-at (cdr lst) (- k 1))))) + +(element-at '(a b c d) 3) ; c diff --git a/p04.el b/p04.el new file mode 100644 index 0000000..84f9e88 --- /dev/null +++ b/p04.el @@ -0,0 +1,10 @@ +;; P04 (*) Find the number of element of a list +(defun my-length (lst) + (defun my-length-rec (lst res) + (cond + ((eq lst '()) res) + (t + (my-length-rec (cdr lst) (+ 1 res))))) + (my-length-rec lst 0)) + +(my-length '(a b c)) ; 3 diff --git a/p05.el b/p05.el new file mode 100644 index 0000000..8d4993a --- /dev/null +++ b/p05.el @@ -0,0 +1,10 @@ +;; P05 (*) Reverse a list +(defun my-reverse (lst) + (defun my-reverse-rec (lst res) + (cond + ((eq lst '()) res) + (t + (my-reverse-rec (cdr lst) (cons (car lst) res))))) + (my-reverse-rec lst '())) + +(my-reverse '(a b c)) ; '(c b a) diff --git a/p06.el b/p06.el new file mode 100644 index 0000000..0c118ef --- /dev/null +++ b/p06.el @@ -0,0 +1,7 @@ +;; P06 (*) Find out whether a list is a palindrome. +(defun palindrome (lst) + (equal lst (reverse lst))) + +(palindrome '(x a m a x)) ; t +(palindrome '(a n n a)) ; t +(palindrome '(f a b i o)) ; nil diff --git a/p07.el b/p07.el new file mode 100644 index 0000000..9a4a175 --- /dev/null +++ b/p07.el @@ -0,0 +1,10 @@ +;; P07 (**) Flatten a nested list structure. +(defun my-flatten (l) + (cond + ((null l) nil) + ((atom l) (list l)) + (t + (append (my-flatten (car l)) + (my-flatten (cdr l)))))) + +(my-flatten '(a (b (c d) e))) ; '(a b c d e)