Lisp - List Processing (or Lots of Irritating Superfluous Parenthesis)
Table of Contents
1. Checking equality
The four functions for checking equality are EQ EQL EQUAL EQUALP
1.1. EQ
This checks for object identity and cannot be used on numbers or characters.
Don't use this - just use EQL instead
1.2. EQL
This checks if two objects of the same class are equal. This behaves just
like EQ except that two objects of the same class with the same
value are considered equal.
The following code is always false because the types of the objects are different:
CL-USER> (eql 1 1.0) NIL
1.3. EQUAL
Can compare if different objects are identical. It will treat two lists with identical contents as being equal.
CL-USER> (eql (list 1 2 3) (list 1 2 3)) NIL CL-USER> (equal (list 1 2 3) (list 1 2 3)) T CL-USER> (eql "Hi there" "Hi there") NIL CL-USER> (equal "Hi there" "Hi there") T
equal also considers strings with the same text as equal.
CL-USER> (equal "Hi there" "Hi there") T
1.4. EQUALP
equalp considers strings with only differing case to be equal.
equalp considers numbers equal if they represent the same value.
CL-USER> (equal "Hi There" "Hi there") NIL CL-USER> (equalp "Hi There" "Hi there") T CL-USER> (equal 1 1.0) NIL CL-USER> (equalp 1 1.0) T
2. Style
2.1. Comments
Comments should be prefaced with one to four semicolons depending on what the comments apply to
;;;; File header comment goes here ;;; Paragraph comment which describes ;;; A major chunk of code that follows (defun myfunc (params) (if (params) ;; This comment applies to the code that ;; follows inside the function (call-some-function) (do-something-else) ; Comment just for this line (commit-stuff)))
3. Short forms
(function foo) is the same as #'foo (quote foo) is the same as 'foo