Comments in AutoLISP

Tuesday, January 27, 2026

Commenting your code is a good practice that makes your programs easier to maintain and understand. AutoLISP supports five comment styles, each with a specific purpose. Let's take a look at them.

The inline comment: ;| ... |;

This style allows you to insert a comment directly in the middle of an expression, or across multiple lines:

(setq x ;| initial value |; 10)

You can also use it across multiple lines:

;| This is a comment
   spanning multiple lines |;

This is the only comment style in AutoLISP that allows you to comment out a block of code. It is useful for temporarily disabling a portion of code during debugging.

The column comment: ;

A comment preceded by a single semicolon is aligned to a fixed column defined in the VLIDE formatting options. It is intended for short end-of-line annotations:

(setq radius 10)                               ; Circle radius
(setq diameter (* 2 radius))                   ; Calculate diameter

When auto-formatting code in VLIDE, these comments are repositioned to the column defined by the Single-Semicolon comment indentation option.

The current-column comment: ;;

A comment preceded by two semicolons is indented at the same level as the surrounding code. It is used to describe the code block that follows:

(defun c:draw-circle (/ center radius)
  ;; Ask the user for parameters
  (setq center (getpoint "\nCenter of the circle: "))
  (setq radius (getdist center "\nRadius: "))

  ;; Draw the circle
  (command "._CIRCLE" center radius)
)

This is the most common style for commenting code sections inside a function. Note that with VS Code, you can also use Ctrl + K, Ctrl + C to comment out selected lines (Ctrl + K, Ctrl + U will uncomment them).

The heading comment: ;;;

A comment preceded by three semicolons is always placed at the beginning of a line, without indentation. It is used to document functions:

;;; Draws a circle from a center point and a radius
;;; center : the center point of the circle
;;; radius : the radius of the circle
(defun draw-circle (center radius)
  (command "._CIRCLE" center radius)
)

This is the convention used to describe a function's purpose, its parameters and its return value.

The closing comment: ;_

This style is placed right after a closing parenthesis to indicate which expression it closes:

(defun c:example (/ i)
  (setq i 0)
  (while (< i 10)
    (if (= (rem i 2) 0)
      (princ (strcat "\n" (itoa i) " is even"))
      (princ (strcat "\n" (itoa i) " is odd"))
    ) ;_ if
    (setq i (1+ i))
  ) ;_ while
) ;_ defun

When functions grow long and parentheses pile up, this comment style helps identify which expression each closing parenthesis terminates. In practice though, if you have a very long function that requires this, it's a code smell — you should probably refactor your function to move some parts into smaller functions.

Full example

Here is an example that uses all five styles:

;;; Displays numbers from 1 to n with their parity
;;; n : the maximum number
(defun display-parity (n / i)
  ;; Initialization
  (setq i 1)

  ;; Main loop
  (while (<= i n)
    (if (= (rem i 2) 0)
      (princ (strcat "\n" (itoa i) " is even" ;| even result |;))
      (princ (strcat "\n" (itoa i) " is odd"))
    ) ;_ if
    (setq i (1+ i))                            ; Increment counter
  ) ;_ while
) ;_ defun

Best practices

  • Use ;;; to document your functions (purpose, parameters, return value).
  • Use ;; to explain logical sections of your code.
  • Use ;_ to identify closing parentheses.
  • Use ; for end-of-line annotations.

Helping hand Need an AutoCAD (AutoLISP, ObjectARX, .NET, VBA) development? Contact me for a free quote.