From 701d3d912c3f440201a469263b775cf8f84b3ca0 Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Wed, 18 May 2022 20:19:18 +0100 Subject: [PATCH] Finish up episode 6 --- docs/videos.org | 105 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 104 insertions(+), 1 deletion(-) diff --git a/docs/videos.org b/docs/videos.org index a2c6363..2ef3b6f 100644 --- a/docs/videos.org +++ b/docs/videos.org @@ -177,7 +177,8 @@ CLOSED: [2022-04-09 Sat 11:24] - boundp - More at https://www.gnu.org/software/emacs/manual/html_node/elisp/Type-Predicates.html ** type-of -* Episode 5 - Lists +* DONE Episode 5 - Lists +CLOSED: [2022-05-18 Wed 12:40] ** What is a list? - Not a primitive type - A linked list made out of cons cells @@ -310,3 +311,105 @@ digraph { #+END_SRC * Episode 6 - Property & Association Lists +** I have an idea +- Develop *FG42* on stream +- I'll announce the date and time on: + + Twitter: @lxsameer + + Youtube Community (maybe) + +** eq vs equal +- ~eq~ checks whether two objects are the same +- ~equal~ checks whether two objects have similar structure and content. + +** Property List (plist) +- Is a list of paired elements +- Each of the pairs associates a property name with a property or value +- The order of the property names (keys) is not significant +- Keys must be unique +- Emacs uses plists to store text properties and symbol properties + +*** Examples +#+BEGIN_SRC emacs-lisp + (setq x '(:a 1 "b" 2 c 3 :d ("foo" "bar") :j nil)) + x +#+END_SRC + +*** Functions +- ~plist-get~ or ~lax-plist-get~ +#+BEGIN_SRC emacs-lisp + (plist-get x :a) + (plist-get x "b") + (lax-plist-get x "b") +#+END_SRC + +- ~plist-put~ or ~lax-plist-put~ +#+BEGIN_SRC emacs-lisp + (plist-put x :z 325) + (plist-put x :z 10) + (lax-plist-put x "b" 20) +#+END_SRC + +- ~plist-member~ +#+BEGIN_SRC emacs-lisp + (plist-get x :j) + (plist-get x :g) + (plist-member x :j) + (plist-member x :g) +#+END_SRC + +** An example use case of plist +#+BEGIN_SRC emacs-lisp + (defun foo (&rest args) + (message "ARGS: %s" args) + (plist-get args :name)) + + (foo :age 20 :name 'bob "blah" '(12 34 4)) +#+END_SRC + +** Association List (alist) +- It is a list of cons cells called associations +- Mapping some keys to some values +- The ~CAR~ of each cons cell is the key, and the ~CDR~ is the associated value +- The order of associations matters + +*** Examples +#+BEGIN_SRC emacs-lisp + (setq y '((:a . 1) ("b" . 2) (c . 3) (:d "foo" "bar"))) + y +#+END_SRC + +*** Functions +- ~assoc~ +#+BEGIN_SRC emacs-lisp + (assoc :a y) + (assoc "b" y) +#+END_SRC + +- ~rassoc~ +#+BEGIN_SRC emacs-lisp + (rassoc 1 y) + (rassoc 3 y) +#+END_SRC + +- ~assq~ +#+BEGIN_SRC emacs-lisp + (assq :a y) + (assq "b" y) +#+END_SRC + +- ~alist-get~ +#+BEGIN_SRC emacs-lisp + (alist-get :a y) + (alist-get :z y "blah") +#+END_SRC + +- ~cons~ +#+BEGIN_SRC emacs-lisp + (setq y1 (cons '(:z . 31) y)) + (assoc :z y1) +#+END_SRC + +** References +- https://www.gnu.org/software/emacs/manual/html_node/elisp/Association-Lists.html +- https://www.gnu.org/software/emacs/manual/html_node/elisp/Plist-Access.html +- https://www.gnu.org/software/emacs/manual/html_node/elisp/Plists-and-Alists.html