Starting from:

$25

CPL-Homework 4 Solved

Programming Languages 

Homework 4 


In this Homework assignment, we will be writing in ​ LIS​           P.​ If you need help on how to run LISP on Openlab, refer to this document her​   e.​



In writing the following LISP functions, you may use only these primitive functions:




defun cond cons car cdr operators +, -, <, and >




null eq

listp

atom symbolp 

1.    [8​ ]​ Define a function​            my-length​     that takes one parameter, a list L, and returns the​  number of top-level elements in L. Examples:

○     (my-length nil) --> 0 

○ (my-length '(b (a b c))       --> 2 

○ (my-length '(a (((b))) c))    --> 3 

○ (my-length '(a b c))          --> 3 

             

2. Define a function ​  my-memq​      that takes two parameters, a symbol A and a list of​  symbols L, and returns the list starting where the symbol bound to A was found.   It returns nil otherwise.  Examples:

○     (my-memq 'a nil)              --> nil 

○ (my-memq 'b '(a b c))         --> (b c) 

○ (my-memq 'd '(a b c d e f g)) --> (d e f g) 

                          ○ (my-memq 'd '(a b c d))       --> (d) 

                          ○ (my-memq 'd '(a b c))         --> nil 

 

3. Define a function ​          my-append​    that takes two parameters, a list L1 and a list L2, and​      returns the result of appending the two lists together.  You must not call append.

○     (my-append '(a b c) '(d e f)) 

--> (a b c d e f) 

                          ○ (my-append '((a) (b) (c)) '((d) (e) (f)))          

--> ((a) (b) (c) (d) (e) (f)) 

                          ○ (my-append nil '(d e f))                              

--> (d e f) 

                          ○ (my-append '(a b c) nil)                               

--> (a b c) 

 

4. Define the function ​      my-attach​      which takes an object O and a list L and returns the​  list L with O added to the end. Examples:

○     (my-attach 'a nil)  --> (a) 

                         ○ (my-attach 'd '(a b c))       --> (a b c d) 

                          ○ (my-attach '(a) '(b c))       --> (b c (a)) 

 

5.Define the function ​           my-assoc​       that takes an atom A and a list L and returns the​        association pair for A. L is of the form ((key1 . value1)(key2 . value2) … (keyn . valuen)) Examples:

○     (my-assoc 'a nil)   --> nil 

○ (my-assoc 'a '((a . b)(c e f)(b))) --> (a . b) ○ (my-assoc 'c '((a . b)(c e f)(b))) --> (c e f) 

○ (my-assoc 'b '((a . b)(c e f)(b))) --> (b) 

○ (my-assoc 'f '((a . b)(c e f)(b))) --> nil 

 

6.  Define the function ​      freq​      that takes a symbol A and a list L and counts the​         occurrence of symbol A found anywhere in L. Examples:

○     (freq  'c '((a c) c e))  --> 2 ○ (freq  'f '(((s) o ) d))      --> 0 

○ (freq  'f '(((f) f) f f))     --> 4 

7. Define the function ​      mapping​        that takes 2 arguments - a list L, and an integer value​   val. Every element of the list L is a list of two atoms - key and object. (e.g. L <-- ((35 kim) (67 clinton) (45 emma))) The function returns a list of objects whose key is less than val. Examples:

○     (mapping '((35 kim) (67 clinton) (45 emma))  40)  --> (kim) 

○ (mapping '((24 a) (15 b) (56 c) (19 d)) 26)    --> (a b d) 

                          ○ (mapping '((90 a) (80 b) (70 c))  40)         

--> nil 

 

8.Define a function ​  my-last​           that takes two parameters, a symbol A and a list of​  symbols L, and returns the list starting where the last occurrence of symbol A is in L.  It returns nil only if A is not in the list.  Examples:


(my-last 'a '(a b c a b c a b c d e f g))  

-->    (a b c d e f g) 

(my-last 'b '(a b c a b c a b c d e f g))  

-->    (b c d e f g) 

(my-last 'c '(a b c a b c a b c d e f g)) 

-->    (c d e f g) 

(my-last 'g '(a b c a b c a b c d e f g))  

-->    (g) 

(my-last 'h '(a b c a b c a b c d e f g))  
-->    nil 


9. Define the function ​      my-reverse​    that takes a list L and returns the reverse of L.​  Examples:

○     (my-reverse nil)    --> nil 

                          ○ (my-reverse '(a))                  --> (a) 

                          ○ (my-reverse '(1 2 3 4 5))          --> (5 4 3 2 1) 

○ (my-reverse '((1 2 3) 4 ((5 6))))  --> (((5 6)) 4 (1 2 3)) 

             

10.Define the function ​       is-pattern?​     that takes two SIMPLE lists pat and str and returns​  the sublist of str which starts with the pat if pat is a substring of str. Otherwise, it returns nil. Examples:

                          ○ (is-pattern? '(a b s) '(c d b a s))                     

--> nil 

○ (is-pattern? '(c a c) '(b a j a c a c t u s))  

--> (c a c t u s) 

                          ○ (is-pattern? nil '(a n y l i s t))                      

--> nil 

○ (is-pattern? '(l i s p) nil) 

--> nil 

 

11.Define the function ​       first-atom​       that takes a list L and returns the first atom of L.​  Examples:

○ (first-atom nil)                   --> nil 

○ (first-atom '((2 (1) 4) 6))    --> 2 ○ (first-atom '((((s)) o )))         --> s 

                          ○ (first-atom '(1 (((2)) 3 4)))      --> 1 


12.Define a function ​         find-all​            that takes a symbol A and a list L and finds and returns​            the first symbol following each occurrence of A in L, or nil if A does not occur in L. Note that A may occur nested within L, possibly as the last element of a sublist.  You may assume that there is always a symbol occurring afterwards. Examples:

○ (find-all 'a nil)                  --> nil 

○ (find-all 'a '(b a c a e))         --> (c e) ○ (find-all 'a '(b d c e))           --> nil 

○ (find-all 'a '(b (a a) c))         --> (a c) 

○ (find-all 'a '((b a) ((c a b))))   --> (c b) 

More products