Added lisp along with some study work
This commit is contained in:
		
							
								
								
									
										85
									
								
								lisp/ansi_lisp/ch3/notes.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								lisp/ansi_lisp/ch3/notes.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| (eql x y) -- Tests of it's the same object | ||||
|  | ||||
| (setf x '(a b c)) | ||||
| (setf y x) -- This will copy the poiner, so any changes to either will affect the other. | ||||
|  | ||||
| (setf x '(a b c) | ||||
| 			y (copy-list x)) -- This will actually create a new list (eql x y) will return nil | ||||
|  | ||||
| (append '(a b) '(c d) '(e)) -- append lists together. Will result in a single combined list. | ||||
|  | ||||
| (nth 0 '(a b c)) -- Find the nth element. In this cas 'A' | ||||
| (nthcdr 1 '(a b c)) -- Find the nth cdr. In this case (B C) | ||||
|  | ||||
| (zerop n) -- Checks if value is 0 | ||||
| (last '(a b c)) -- Returns last cons in a list. So it'll return "(C) here | ||||
| (car(last '(a b c))) -- Returns last element of a list. In this case "C" | ||||
|  | ||||
| --first - tenth are defined as functions that are not zero indexed so for example: | ||||
| (fifth '(a b c d e f g h i)) -- Will return "E" (the element, not the cons) | ||||
|  | ||||
| (mapcar #'(lambda (x) (+ x 10)) | ||||
| 				'(1 2 3)) -- Takes a function and applies everything in the list to it. In this case it will return (11 12 13) | ||||
|  | ||||
| (mapcar #'list | ||||
| 				'(a b c) | ||||
| 				'(1 2 3 4)) -- Would return: | ||||
| 				((A1) (B2) (C 3))  | ||||
|  | ||||
| (member 'b '(a b c d e)) -- (member) finds what it's looking for, and returns it as well as the cdr from that point. So here we would see "b" - "e" | ||||
|  | ||||
| -- Keywords are a symbol preceded by a colon... so ":test" for example | ||||
| -- Member defaults to testing with eql, perhaps we want equal instead: | ||||
| -- NOTE: Equal is less strict than eql. Equal returns true if it's arguemnts print the same. | ||||
| -- EQL only if they are the same object | ||||
| (member '(a) '((a) (z)) :test #'equal) -- Will result in ((A) (Z)) | ||||
|  | ||||
| --There is also :key | ||||
| (member 'a '((a b) (c d)) :key #'car) -- will return ((A B) (C D)) -- We asked if there was an element whose car was a | ||||
| -- keywords are always at the end, and multiple are acceptable. | ||||
|  | ||||
| If we want to find an element satisfying an arbitrary predicate, like oddp, which returns true for odd ints, we can use member-if | ||||
|  | ||||
| (member-if #'oddp '(2 3 4)) -- This will find the first odd number, 3 in this case, and return it along with the rest of the list | ||||
|  | ||||
| (adjoin) -- conses an object into a list if it's not already a member | ||||
| (adjoin 'b '(a b c)) -- (A B C) | ||||
| (adjoin 'z '(a b c)) -- (Z A B C) | ||||
|  | ||||
| (union '(a b c) '(c b s)) -- (A C B S) | ||||
| (intersection '(a b c) '(b b c)) -- (B C) | ||||
| (set-difference '(a b c d e) '(b e)) -- (A C D) -- So, expected stuff | ||||
| -- The above creates sets, and as we know, sets have no specific order | ||||
|  | ||||
| (length ' (a b c)) -- 3 | ||||
|  | ||||
| -- Grab a part of a list | ||||
| -- Think python slices, third  argument (second number) is optional. | ||||
| (subseq '(a b c d) 1 2) -- (B) | ||||
| (subseq '(a b c d) 1) -- (B C D)  | ||||
|  | ||||
| (reverse '(a b c)) -- Obvious, returns (A B C) | ||||
|  | ||||
| (subseq(reverse '(a b c)) 0 2) -- (C B) -- A way to grab the last two | ||||
| (subseq(reverse '(a b c)) 1) -- (B A) -- Start with second to last and go backwards. Basically cut off the last (or however many ) element  | ||||
|  | ||||
| (sort '(0 2 1 3 8) #'>) -- (8 3 2 1 0) -- Is destructive to the origional list. Of course, < would sort in order | ||||
|  | ||||
| (every #'oddp '(1 3 5)) -- Are they all odd? -- True | ||||
| (some #'evenp '(1 2 3)) -- Are some of the even? -- True | ||||
|  | ||||
| (every #'> '(1 3 5) '(0 2 4)) -- Think math, is every element greater than it's corresponding element so... | ||||
| -- is 1 > 0? AND is 3 >2 AND is 5>4? True | ||||
| If sequences are different lengths, the shortests determines how many tests are performed. | ||||
|  | ||||
| (push x y) push object x onto the front of list y | ||||
| (pop x) -- remove and return the first element of list x | ||||
|  | ||||
| (let ((x '(a b))) | ||||
| 	(pushnew 'c x) | ||||
| 	(pushnew 'a x) | ||||
| 	x) -- This will only push to "x" if the object doesn't already exist. | ||||
|  | ||||
| -- Conses are not just for building lists, an improper list, or dotted list, can be used make a structure with two fields | ||||
| (setf pair (cons 'a 'b)) -- (A . B) | ||||
| -- car will return A, while cdr will return B | ||||
		Reference in New Issue
	
	Block a user