This program is a Common Lisp tool to convert s-expressions into Python.
I used Chat GPT 4 to get started with the following documentation. Eventually, I have to go through this and fix the mistakes it made.
The prompt I used is:
create documentation for the forms that are supported by the selected code.
the output shall be like:
tuple .. Python tuple. Example: (tuple 1 2) => (1,2,)
paren .. Comma separated values in parentheses. Example: (paren 1 2) => (1, 2)
ntuple .. comma separeted values without parentheses. This can be used as an assignment target. Example: (setf (ntuple a b) (fun)) => a, b = fun()
<source code of the big case statement in emit-py>
I shall try again and tell Chat GPT 4 that the code is Common Lisp and we are dealing with a s-expression based syntax for Python. Maybe it will do a better job.
Tuple
- Python tuple: A finite ordered list of elements. Tuples are immutable and typically used to store collections of heterogeneous items.
- Example:
(tuple 1 2)=>(1, 2,)
Paren
- Comma separated values in parentheses: A sequence of values separated by commas and enclosed in parentheses. Used to define ordered collections of items.
- Example:
(paren 1 2)=>(1, 2)
NTuple
- Comma separated values without parentheses: A sequence of values separated by commas, not enclosed in parentheses. This format is commonly used for unpacking iterables into variables.
- Example:
(setf (ntuple a b) (fun))=>a, b = fun()
List
- Python list: A mutable sequence, typically used to store collections of homogenous items.
- Example:
(list 1 2)=>[1, 2]
Curly
- Set or Dictionary initializer: Initializes a Python set or dictionary using curly braces.
- Example:
(curly 1 2)=>{1, 2}for a set or{key1: value1, key2: value2}for a dictionary if used with pairs.
Dict
- Python dictionary: A mutable mapping of unique keys to values. Dictionaries are indexed by keys.
- Example:
(dict (a 1) (b 2))=>{'a': 1, 'b': 2}
Dictionary
- Python dictionary using 'dict' constructor: Similar to 'Dict', but uses the 'dict()' constructor to build the dictionary.
- Example:
(dictionary :a 1 :b 2)=>dict(a=1, b=2)
Indent
- Indented block: Adds indentation to a block of code, commonly used inside code blocks like loops and conditionals to indicate scope.
- Example:
(indent level code)=>" code"(where 'level' is a number indicating the depth of indentation)
Do
- Execute a series of statements: Allows multiple statements to be executed in a sequence within the scope where 'do' appears.
- Example:
(do (stmt1) (stmt2))=> executes 'stmt1' and then 'stmt2'
Class
- Python class definition: Defines a new class with given parents and body of methods or attributes.
- Example:
(class MyClass (Parent1 Parent2) (def __init__ (self arg)))=> defines a class 'MyClass' inheriting from 'Parent1' and 'Parent2' with an 'init' method
Do0
- Execute a series of statements starting with a special statement: Similar to 'do', but ensures a specific statement is executed first.
- Example:
(do0 (first-statement) (stmt1) (stmt2))=> ensures 'first-statement' runs before 'stmt1' and 'stmt2'
Cell
- Grouping related statements: Used to group a series of related statements, commonly used for organizational purposes in the code.
- Example:
(cell (stmt1) (stmt2))=> groups 'stmt1' and 'stmt2' logically together
Export
- Mark code for export: Indicates that the enclosed code should be available for use outside of its defining module.
- Example:
(export (def func (arg1)))=> indicates that function 'func' should be exported
Space
- Separate values by space: Concatenates a sequence of strings or representations of objects, separating them with a space.
- Example:
(space "Hello" "World")=>"Hello World"
Lambda
- Anonymous function: Defines an anonymous function (a lambda function) with the specified arguments and body.
- Example:
(lambda (x) (add x 1))=>lambda x: x + 1
Def
- Function definition: Defines a function with a given name, parameters, and body.
- Example:
(def func (x y) (add x y))=>def func(x, y): return x + y
Setf
- Assignment statement: Used to assign values to variables.
- Example:
(setf (a b) (c d))=>a = b; c = d
Incf
- Increment field: Increases the value of a variable by a specified amount.
- Example:
(incf a 2)=>a += 2
Decf
- Decrement field: Decreases the value of a variable by a specified amount.
- Example:
(decf a 2)=>a -= 2
Aref
- Array reference: Retrieves an element from an array or list at a given index.
- Example:
(aref array-name 1)=>array_name[1]
Slice
- Slicing: Accesses a range of elements from a sequence.
- Example:
(slice 1 2)=>[1:2]
Dot
- Attribute access: Accesses an attribute of an object.
- Example:
(dot obj attr)=>obj.attr
Plus (+)
- Addition: Calculates the sum of the given arguments.
- Example:
(+ 1 2)=>(1) + (2)
Minus (-)
- Subtraction: Calculates the difference between the given arguments.
- Example:
(- 5 3)=>(5) - (3)
Multiply (*)
- Multiplication: Calculates the product of the given arguments.
- Example:
(* 2 3)=>(2) * (3)
At (@)
- Decorator or matrix multiplication: Used as a decorator indicator or for matrix multiplication in later versions of Python.
- Example:
(@ decorator)=>@decorator;(@ matrix1 matrix2)=>(matrix1) @ (matrix2)
Equals (==)
- Equality comparison: Compares two values for equality.
- Example:
(== a b)=>(a) == (b)
Left shift (<<)
- Bitwise left shift: Shifts the bits of a number to the left by a specified number of positions.
- Example:
(<< a 2)=>(a) << (2)
Not Equals (!=)
- Inequality comparison: Compares two values for inequality.
- Example:
(!= a b)=>(a) != (b)
Less Than (<)
- Less than comparison: Checks if one value is less than another.
- Example:
(< a b)=>(a) < (b)
Greater Than (>)
- Greater than comparison: Checks if one value is greater than another.
- Example:
(> a b)=>(a) > (b)
Less Than or Equals (<=)
- Less than or equal to comparison: Checks if one value is less than or equal to another.
- Example:
(<= a b)=>(a) <= (b)
Greater Than or Equals (>=)
- Greater than or equal to comparison: Checks if one value is greater than or equal to another.
- Example:
(>= a b)=>(a) >= (b)
Right shift (>>)
- Bitwise right shift: Shifts the bits of a number to the right by a specified number of positions.
- Example:
(>> a 2)=>(a) >> (2)
Divide (/)
- Division: Divides one number by another.
- Example:
(/ 10 2)=>((10)/(2))
Exponentiation ()**
- Exponentiation: Raises a number to the power of another number.
- Example:
(** 2 3)=>((2)**(3))
Floor division (//)
- Integer division: Divides one number by another, rounding down to the nearest whole number.
- Example:
(// 10 3)=>((10)//(3))
Modulo (%)
- Remainder operation: Calculates the remainder of a division.
- Example:
(% 10 3)=>((10)%(3))
And
- Logical AND: Performs a logical AND operation between multiple conditions.
- Example:
(and cond1 cond2)=>(cond1) and (cond2)
Bitwise AND (&)
- Bitwise AND: Performs a bitwise AND operation between multiple numbers.
- Example:
(& a b)=>(a) & (b)
Logand
- Bitwise Logical AND: Another notation for performing a bitwise AND operation.
- Example:
(logand a b)=>(a) & (b)
Logxor
- Bitwise Exclusive OR (XOR): Performs a bitwise XOR operation between multiple numbers.
- Example:
(logxor a b)=>(a) ^ (b)
Or
- Logical OR: Performs a logical OR operation between multiple conditions.
- Example:
(or cond1 cond2)=>(cond1) or (cond2)
Logior
- Bitwise Inclusive OR: Performs a bitwise OR operation between multiple numbers.
- Example:
(logior a b)=>(a) | (b)