# Elisp: List

This page is a basic tutorial of Emacs Lisp's list datatype.

## Create List

To create a list, write it like this `(list `

.`a` `b` …)

; assign a list to a var (setq mylist (list 1 "b" 3))

; prints a list (message "%S" mylist)

If you do not want the elements evaluated, write it like this: `'(`

.
This is equivalent to `a` `b` …)`(quote (list `

`a` `b` …))

; assign a list to a var (setq mylist '(a b c)) ; prints a list (message "%S" mylist)

;; create a list of values of variables (let ((x 3) (y 4) (z 5)) (message "%S" (list x y z)) ) ; prints "(3 4 5)"

## list of Numbers (aka Range Function)

`(number-sequence `

→ returns a list of a range of numbers, from `n` `m` `step`)`n` to `m`, in increment of `step`.

`(number-sequence `

→ default step 1.`n` `m`)

`(number-sequence `

→ returns a list of 1 element of value `n`)`n`.

;; creating a range of numbers ;; just 1 element (number-sequence 5) ; (5) ;; n to m, inclusive (number-sequence 2 5) ; (2 3 4 5) ;; using 3 as step (number-sequence 0 9 3) ; (0 3 6 9) ;; step can be negative (number-sequence 5 0 -1) ; (5 4 3 2 1 0) ;; boundaries can be float but will not include (number-sequence 2.2 5.3) ; (2.2 3.2 4.2 5.2)

## Length

`(length `

→ return number of elements.`list`)

(length '("a" "b" "c") ) ; 3

## Get Elements of a List

List index count starts from 0.

Function | Purpose |
---|---|

`(car ` | first element |

`(nth ` | nth element |

`(car (last ` | last element |

(car (list "a" "b" "c") ) ; "a"

(nth 1 (list "a" "b" "c") ) ; "b"

(car (last (list "a" "b" "c")) ) ; "c"

Function | Purpose |
---|---|

`(cdr ` | 2nd to last elements. |

`(nthcdr ` | nth to last elements. |

`(butlast ` | without the last n elements. |

(cdr (list "a" "b" "c") ) ; ("b" "c")

(butlast (list "a" "b" "c" "d") ) ; ("a" "b" "c") (butlast (list "a" "b" "c" "d") 2) ; ("a" "b")

## Prepend to list

Function | Purpose |
---|---|

`(cons ` | Return a new list, with x added to front. (prepend) |

(cons "a" (list "c" "d") ) ; ("a" "c" "d") (cons (list "a" "b") (list "c" "d") ) ; (("a" "b") "c" "d")

## Append (join lists)

Function | Purpose |
---|---|

`(append ` | Return a new list, join two lists |

(equal (list 1 2 3 4) (append (list 1 2) (list 3 4)) ) ;; t

## Modify List Variable

Function | Purpose |
---|---|

`(push ` | Add a element to the front variable. Returns the new list. |

`(pop ` | Remove first element from the variable. Returns the removed element. |

`(nbutlast ` | Remove last n elements from the variable. Returns the new value of the variable. |

`(setcar ` | replaces the first element in list with x. Returns x. |

`(setcdr ` | replaces the rest of elements in list with x. Returns x. |

(let ((x '(1))) (push 2 x) (equal x '(2 1)) ; true )

(setq mylist '("a" "b" "c")) (pop mylist) ; "a" (print mylist) ; ("b" "c")

The weird names {car, cdr, cons} are like that for historical reasons.

## List to String

Ways to convert a list to string.

;; convert a list to string (mapconcat 'number-to-string '(1 2 3) ",") ;; "1,2,3"

;; convert a list to string (mapconcat 'identity '("a" "b" "c") ",") ;; "a,b,c"

;; convert list to string (format "%s" '(1 "two" 3)) ;; "(1 two 3)" (substring (format "%s" '(1 "two" 3)) 1 -1) ;; "1 two 3"

## Map / Loop Thru List

Elisp: Map / Loop Thru List / Vector

## List vs Vector

## Association List (alist)

[see Elisp: Association List]

#### Data Structure Topic

If you have a question, put $5 at patreon and message me.