The ugly-tiny-infix-macro Reference Manual

Next: , Previous: , Up: (dir)   [Contents][Index]

The ugly-tiny-infix-macro Reference Manual

This is the ugly-tiny-infix-macro Reference Manual, generated automatically by Declt version 4.0 beta 2 "William Riker" on Wed Jun 15 06:04:04 2022 GMT+0.

Table of Contents


1 Introduction

Ugly Tiny Infix Macro

This is a powerful lisp macro for the purpose of writing your expressions in infix notation while not losing out on lisp's power.

Let's look at a few examples

Examples

At its simplest,

($ 1 + 2)		; gets converted to (+ 1 2), where name of the macro is $
($ t and nil) 	; gets converted to (and t nil)
($ 3 > 5) 		; gets converted to (> 3 5)
($ 1 + 2 + 3) 	; gets converted to (+ (+ 1 2) 3)

You can use various operators (which is just a fancy name for a function) at once and they're grouped according to the precedence.

Default precedence of operators that ships with the project is taken from the C++ standard. Check the default-operator-precedence-alist.lisp file for a full list of operators available by default. Check out the section on customizing the list of operators and their priorities if you wish to do so.

($ 1 + 2 *  3)      ; gets converted to (+ 1 (* 2 3))
($ 1 < 2 and 2 < 3) ; gets converted to (AND (< 1 2) (< 2 3))

Anything within parentheses at position of an operand is treated like a lisp form.

($ 2 + (max 9 10 11)) ; gets converted to (+ 2 (max 9 10 11)). It could have been any function / lisp form.
($ 6 / ($ 1 + 2))     ; gets converted to (/ 6 ($ 1 + 2)), and then subsequently to (/6 (+ 1 2))

As illustrated by the last example, nesting the macro can be used for "grouping" or "higher precedence" so that it's evaluated first like is done with brackets in mathematical notation.

You may write the last example as 6 / (1 + 2) in math. Most deeply nested brackets are executed the first, and same is the case when you nest this macro.

WARNING: As explained in the example on nesting the macro, brackets are assumed to be valid lisp forms. Do not use them for grouping. Writing ($ 6 / (1 + 2)) will give you an error as it's expanded to (/ 6 (1 + 2)) and (1 + 2) is not a valid lisp form. Your lisp environment will try to evaluate it and find that 1 isn't name of a function that can be called with the arguments + and 2. This is what puts "ugly" in the the name of the project, because it's not prettiest to the eye, but some may find that it's easy to reason about.

Installation

This package is available on quicklisp. You may install it using

(ql:quickload :ugly-tiny-infix-macro)

Alternately, you can dowload the source files manually and load it via asdf

Usage

The package, named :ugly-tiny-lisp-macro with the nickname :ugly-infix exports three symbols -

Customizing The List of Operators and Their Priorities

Operator precedence is stored as an alist associated with the symbol *operator-precedence-alist*. An example of a valid alist that one may assign for DMAS precedence may look like:

(setf ugly-infix:*operator-precedence-alist*
	  '(( / . 1) ; a lower number means a higher priority/precedence
	    ( * . 1) ; / and * are at the same priority/precedence
	    ( + . 2) ; a higher number means a lower priority/precedence
	    ( - . 2)))

You may modify *operator-precedence-alist* in any manner by resetting, pushing, etc as long as it is a valid alist of operators and their priority. The position in the list / order of cons elements does not matter.

Miscellaneous

Note that this project only deals with binary operators, e.g. functions that accept (operate on) two arguments.

License

This project is licensed under the terms of APACHE 2.0 license. Please see the LICENSE file for the text of the license.


2 Systems

The main system appears first, followed by any subsystem dependency.


Previous: , Up: Systems   [Contents][Index]

2.1 ugly-tiny-infix-macro

A tiny and simple macro to allow writing binary operations in infix notation

Author

Peeyush Kushwaha <peeyush.p97+dev@gmail.com>

License

Apache License, Version 2.0

Source

ugly-tiny-infix-macro.asd.

Child Components

3 Files

Files are sorted by type and then listed depth-first from the systems components trees.


Previous: , Up: Files   [Contents][Index]

3.1 Lisp


3.1.1 ugly-tiny-infix-macro/ugly-tiny-infix-macro.asd

Source

ugly-tiny-infix-macro.asd.

Parent Component

ugly-tiny-infix-macro (system).

ASDF Systems

ugly-tiny-infix-macro.


3.1.3 ugly-tiny-infix-macro/default-operator-precedence-alist.lisp

Dependency

defpackage.lisp (file).

Source

ugly-tiny-infix-macro.asd.

Parent Component

ugly-tiny-infix-macro (system).

Public Interface

*operator-precedence-alist* (special variable).


3.1.5 ugly-tiny-infix-macro/ugly-tiny-infix-macro.lisp

Dependency

error-handling.lisp (file).

Source

ugly-tiny-infix-macro.asd.

Parent Component

ugly-tiny-infix-macro (system).

Public Interface

$ (macro).

Internals

4 Packages

Packages are listed by definition order.


Previous: , Up: Packages   [Contents][Index]

4.1 ugly-tiny-infix-macro

Source

defpackage.lisp.

Nickname

ugly-infix

Use List

common-lisp.

Public Interface
Internals

5 Definitions

Definitions are sorted by export status, category, package, and then by lexicographic order.


Next: , Previous: , Up: Definitions   [Contents][Index]

5.1 Public Interface


Next: , Previous: , Up: Public Interface   [Contents][Index]

5.1.1 Special variables

Special Variable: *operator-precedence-alist*
Package

ugly-tiny-infix-macro.

Source

default-operator-precedence-alist.lisp.


5.1.2 Macros

Macro: $ (&rest list-of-expressions)

Infix binary operations for lisp!

Package

ugly-tiny-infix-macro.

Source

ugly-tiny-infix-macro.lisp.


Next: , Previous: , Up: Public Interface   [Contents][Index]

5.1.3 Standalone methods

Method: print-object ((err malformed-infix-expression-error) ostream)
Source

error-handling.lisp.


5.1.4 Conditions

Condition: malformed-infix-expression-error
Package

ugly-tiny-infix-macro.

Source

error-handling.lisp.

Direct superclasses

error.

Direct methods
Direct slots
Slot: text
Initargs

:text

Readers

malformed-infix-expression-error-text.

Writers

This slot is read-only.

Slot: expression
Initargs

:expression

Readers

malformed-infix-expression-error-expression.

Writers

This slot is read-only.


5.2 Internals


Next: , Previous: , Up: Internals   [Contents][Index]

5.2.1 Ordinary functions

Function: apply-popped (popped-stack queue)
Package

ugly-tiny-infix-macro.

Source

ugly-tiny-infix-macro.lisp.

Function: check-list-of-expressions (list-of-expressions operator-precedence-alist)
Package

ugly-tiny-infix-macro.

Source

error-handling.lisp.

Function: check-operator-precedence-alist (operator-precedence-alist)
Package

ugly-tiny-infix-macro.

Source

error-handling.lisp.

Function: recursively-pop-stack (stack element operator-precedence-alist &optional popped)
Package

ugly-tiny-infix-macro.

Source

ugly-tiny-infix-macro.lisp.

Function: shunting-yard (list-of-expressions operator-precedence-alist)
Package

ugly-tiny-infix-macro.

Source

ugly-tiny-infix-macro.lisp.


5.2.2 Generic functions

Generic Reader: malformed-infix-expression-error-expression (condition)
Package

ugly-tiny-infix-macro.

Methods
Reader Method: malformed-infix-expression-error-expression ((condition malformed-infix-expression-error))
Source

error-handling.lisp.

Target Slot

expression.

Generic Reader: malformed-infix-expression-error-text (condition)
Package

ugly-tiny-infix-macro.

Methods
Reader Method: malformed-infix-expression-error-text ((condition malformed-infix-expression-error))
Source

error-handling.lisp.

Target Slot

text.


Appendix A Indexes


Next: , Previous: , Up: Indexes   [Contents][Index]

A.1 Concepts


Next: , Previous: , Up: Indexes   [Contents][Index]

A.2 Functions

Jump to:   $  
A   C   F   G   M   P   R   S  
Index Entry  Section

$
$: Public macros

A
apply-popped: Private ordinary functions

C
check-list-of-expressions: Private ordinary functions
check-operator-precedence-alist: Private ordinary functions

F
Function, apply-popped: Private ordinary functions
Function, check-list-of-expressions: Private ordinary functions
Function, check-operator-precedence-alist: Private ordinary functions
Function, recursively-pop-stack: Private ordinary functions
Function, shunting-yard: Private ordinary functions

G
Generic Function, malformed-infix-expression-error-expression: Private generic functions
Generic Function, malformed-infix-expression-error-text: Private generic functions

M
Macro, $: Public macros
malformed-infix-expression-error-expression: Private generic functions
malformed-infix-expression-error-expression: Private generic functions
malformed-infix-expression-error-text: Private generic functions
malformed-infix-expression-error-text: Private generic functions
Method, malformed-infix-expression-error-expression: Private generic functions
Method, malformed-infix-expression-error-text: Private generic functions
Method, print-object: Public standalone methods

P
print-object: Public standalone methods

R
recursively-pop-stack: Private ordinary functions

S
shunting-yard: Private ordinary functions

Jump to:   $  
A   C   F   G   M   P   R   S