Data Types in Lisp
OverviewNumbersCharactersSymbolsLists and consesArraysHash tablesFunctionsData structures
In Lisp, data type is possibly a set of lisp objects.The set of all objects is defined by the symbol t.The empty data type which contains no data objects, is defined by nil.A type called common encompasses all the data objects required by the Common Lisp Objects.The following categories of Common Lisp Objects are of particular interest: Numbers, characters, Symbols, Lists, arrays, structures, and functions.Lisp data types
NumbersNumber data type includes all kinds of data numbers.Integers and ratios are of type Rational.Rational  numbers and floating point numbers are of type Real.Real  numbers and complex numbers are of type Number.Numbers of type Float may be used to approximate real numbers both rational and irrational.Integer data type is used to represent common  mathematical integers.In Common Lisp there is a range of integers that are represented  more efficiently than others; each integer is called a Fixnum. ( range: -2^n to 2^n-1, inclusive)An integer that is not a fixnum is called bignum.Integers may be noted in radices other than 10. The notation #nnrddddd or #nnRddddd means the integer in radix-nn notation denoted by the digits dddd.
NumbersNumbersA ratio is the number representing the mathematical ratio of two integers.Integers and ratios collectively constitute the Rational.Rule of rational canonicalization: If any computation produces a result that is a ratio of two integers such that the denominator evenly divides the numerator, the result is immediately converted into the equivalent integer.Complex numbers( type Complex) are represented in Cartesian form, with a real part and an imaginary part, each of which is a non-complex number. Complex numbers are denoted by #c followed by a list of real and imaginary parts.Ex: #c(5 -4), #c(0 1) etc.
NumbersNumbersA floating-point  number is a rationale number of the form s.f.b^(e-p) where s is the sign(+1 or -1), b is the base(integer greater than 1), p is the precision, f is the significand ( positive integer between b^(p-1) and b^p -1 inclusive), e is the exponent. Recommended minimum Floating-point precision and Exponent Size.
CharactersCharacters are of data objects of type Character. There are 2 subtypes of interest :standard-char and string-char.A character object is denoted by writing #\ followed by the character itself.Ex: #\gThe Common Lisp character set consists of a space character#\Space and a new line character#\Newline, and the following 94 non-blank printing characters.(standard characters)! “ # $ % & ‘ ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; <  > ?@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _‘ a b c d e f g h i j k l m n o p q r s t u v w x y z { \ } ~
CharactersCharactersThe following characters are called semi-standard charecters:#\Backspace,  #\Tab,  #\Linefeed,  #\Page, #\Return, #\RuboutEvery object of type character has three attributes: code( intended to distinguish between character printed glyphs and formatting functions for characters), bits( allows extra flags to be associated with a character.) and font(specifies the specification of the style of the glyphs)Any character whose bits and fonts are zero may be contained in strings.All such characters together constitute a subtype of characters  called string-char.
SymbolsEvery object of type symbol has a name called its print-name.Symbols have a component called the property-list or plist.A symbol is notated simply by writing its name, if its name is not empty.Ex: frobbboz, +$, /user/games/sliderOther notating symbols are: + - * / @ $ % ^ & _  < > ~ .Writing an escape character(\) before any character causes the character to be treated itself as an ordinary character.Ex: \( denotes character (       \+1 denotes +1
Lists and ConsA cons is a record structure containing two components called the car and the cdr.Conses are used primarily to represent Lists.A list is a chain of conses  linked by their cdr components and terminated by nil.The car components of the conses are called the elements of the lists.A list is notated by writing the elements of the list in order, separated by blank spaces and sorrounded by parenthesis.Ex: ( a b c).A dotted-list is one whose last  cons doesn't have a nil for its cdr., after the last element and before the parenthesis is written a dot and the cdr of the last cons.Ex: ( a b c. 4), ( a . d) etc..In Lisp ( a b . ( c d)) means same as the (a b c d)
ArraysAn array is an object with the components arranged according to a Cartesian co-ordinate system.The number of dimensions of an array is called its rank.An array element is specified by a sequence of elements.The length of the sequence must be equal to the rank of the array.One may refer to array elements using the function aref.Ex: (aref foo 2 1) refers to element (2,1) of the array.
ArraysArraysMulti-dimensional arrays store their components in row-major orderInternally the multidimensional array is stored as a one-dimensional array, with the multidimensional index sets ordered lexicographically, last index varying fastest. This is important in 2 situations:When arrays with different dimensions share their contents, and
When accessing  very large arrays in virtual-memory implementation.A simple-array is one which is not displaced to another array, has no fill pointer, and is not to have its size adjusted dynamically after creation.
ArraysArraysTo create an array use the syntax:Make-array dimensions &key :element-type            :initial-element :initial-contents: adjustable:fill-pointer: displaced to: displaced-index-offset.Ex: (make array ‘(4 2 3): initial contents                             ‘(((a b c) (1 2 3))                               ((d e f) (3 1 2))                                ((g h i) (2 3 1))                                 ((j k l) (0 0 0))))
VectorsOne dimensional array is called vectors in lisp and constitute the type Lisp.Vectors and Lisps are collectively considered to be sequences.A general vectors is notated by notating the components in order sorrounded by #( and )Ex: #( a b c d ), #( ), #( 1 2 3 ) etc.
StructuresStructures are instances of user-defined data types that have a fixed number of named components.Structures are declared using the defstruct  construct.The default notation for a structure is:#s(structure-name                  slot-name-1 slot-value-1                 slot-name-2 slot-value-2                 ……….)Where #s indicates structure syntax, structure name is the name(symbol) the structure type, each slot-name is the name of the component and each corresponding slot value is the representation of the lisp object in that slot.
Hash tables provide an efficient way of mapping any LIST object (a key) to an associate object.To work with hash tables CL provides the constructor function (make-hash-table) and the accessor function( get-hash).In order to look up a key and find the associated value, (use gethash)New entries are added to hash table using the setq and gethash functions.To remove an entry use remhash.Hash Tables
Hash TablesEx: (setq a (make-hash-table))       (setf  (gethash ‘color a) ‘black)        (setq (gethash ‘name a) ‘fred)(Gethash ‘color a)black(gethash  ‘name a)fred(gethash ‘pointy a)nil
Hash TablesHash table functionsSyntax: make-hash-table &key :test :size :rehash-size :rehash-threshold:test attribute  determines how the attributes are compared, it must be one of the values( #’eq, #’eql, #’eql or one of the symbols(eq, eql, equal):size attribute sets the initial size of the hash table.:rehash-size argument specifies how much to increase the size of the hash table when it becomes full.:rehash-threshold specifies how full the hash table can be before it must grow.Ex:  (make-hash-table: re-hash size 1.5                                    :size (* number-of-widgets 43))
FunctionsFunctions are objects that can be invoked as procedures: These may take arguments and return values.A compiled function is a compiled-code object.A lambda-expression (a list whose car is the symbol lambda) may serve as a function.
Data structuresCL operators for manipulating lists as data structures are used for:Finding the length of the list
Accessing particular members of the list
Appending multiple lists together to make a new list
Extracting elements from the list to make a new list.Common lisp defines accessor function from first to tenth as a means of accessing the first ten elements of the list.Ex: (first ‘(a b c))A       (third ‘(a b c))CUse the function nth to access an element from the arbitrary list.Ex: (nth 0 ‘(a b c))A      (nth 1 ‘(a b c))B
Data structuresData structuresTo check if a particular object is lisp or  not,CL provides Listp function.It always returns either T or NILEx: (listp ‘(pontaic cadillac chevrolet))T      (listp 99)NILThe function Length is used to get the number of elements in List as an integers.Ex: (length ‘(pontaic cadillac chevrolet))3The member function is used to determine if the particular item is a member of the particular list.Ex: (member ‘dallas ‘(boston san-fransisco portland))NIL(member ‘san-fransisco’(boston san-fransisco portland))SAN-FRANSISCO PORTLAND

LISP: Data types in lisp

  • 1.
  • 2.
  • 3.
    In Lisp, datatype is possibly a set of lisp objects.The set of all objects is defined by the symbol t.The empty data type which contains no data objects, is defined by nil.A type called common encompasses all the data objects required by the Common Lisp Objects.The following categories of Common Lisp Objects are of particular interest: Numbers, characters, Symbols, Lists, arrays, structures, and functions.Lisp data types
  • 4.
    NumbersNumber data typeincludes all kinds of data numbers.Integers and ratios are of type Rational.Rational numbers and floating point numbers are of type Real.Real numbers and complex numbers are of type Number.Numbers of type Float may be used to approximate real numbers both rational and irrational.Integer data type is used to represent common mathematical integers.In Common Lisp there is a range of integers that are represented more efficiently than others; each integer is called a Fixnum. ( range: -2^n to 2^n-1, inclusive)An integer that is not a fixnum is called bignum.Integers may be noted in radices other than 10. The notation #nnrddddd or #nnRddddd means the integer in radix-nn notation denoted by the digits dddd.
  • 5.
    NumbersNumbersA ratio isthe number representing the mathematical ratio of two integers.Integers and ratios collectively constitute the Rational.Rule of rational canonicalization: If any computation produces a result that is a ratio of two integers such that the denominator evenly divides the numerator, the result is immediately converted into the equivalent integer.Complex numbers( type Complex) are represented in Cartesian form, with a real part and an imaginary part, each of which is a non-complex number. Complex numbers are denoted by #c followed by a list of real and imaginary parts.Ex: #c(5 -4), #c(0 1) etc.
  • 6.
    NumbersNumbersA floating-point number is a rationale number of the form s.f.b^(e-p) where s is the sign(+1 or -1), b is the base(integer greater than 1), p is the precision, f is the significand ( positive integer between b^(p-1) and b^p -1 inclusive), e is the exponent. Recommended minimum Floating-point precision and Exponent Size.
  • 7.
    CharactersCharacters are ofdata objects of type Character. There are 2 subtypes of interest :standard-char and string-char.A character object is denoted by writing #\ followed by the character itself.Ex: #\gThe Common Lisp character set consists of a space character#\Space and a new line character#\Newline, and the following 94 non-blank printing characters.(standard characters)! “ # $ % & ‘ ( ) + * , - . / 0 1 2 3 4 5 6 7 8 9 : ; < > ?@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _‘ a b c d e f g h i j k l m n o p q r s t u v w x y z { \ } ~
  • 8.
    CharactersCharactersThe following charactersare called semi-standard charecters:#\Backspace, #\Tab, #\Linefeed, #\Page, #\Return, #\RuboutEvery object of type character has three attributes: code( intended to distinguish between character printed glyphs and formatting functions for characters), bits( allows extra flags to be associated with a character.) and font(specifies the specification of the style of the glyphs)Any character whose bits and fonts are zero may be contained in strings.All such characters together constitute a subtype of characters called string-char.
  • 9.
    SymbolsEvery object oftype symbol has a name called its print-name.Symbols have a component called the property-list or plist.A symbol is notated simply by writing its name, if its name is not empty.Ex: frobbboz, +$, /user/games/sliderOther notating symbols are: + - * / @ $ % ^ & _ < > ~ .Writing an escape character(\) before any character causes the character to be treated itself as an ordinary character.Ex: \( denotes character ( \+1 denotes +1
  • 10.
    Lists and ConsAcons is a record structure containing two components called the car and the cdr.Conses are used primarily to represent Lists.A list is a chain of conses linked by their cdr components and terminated by nil.The car components of the conses are called the elements of the lists.A list is notated by writing the elements of the list in order, separated by blank spaces and sorrounded by parenthesis.Ex: ( a b c).A dotted-list is one whose last cons doesn't have a nil for its cdr., after the last element and before the parenthesis is written a dot and the cdr of the last cons.Ex: ( a b c. 4), ( a . d) etc..In Lisp ( a b . ( c d)) means same as the (a b c d)
  • 11.
    ArraysAn array isan object with the components arranged according to a Cartesian co-ordinate system.The number of dimensions of an array is called its rank.An array element is specified by a sequence of elements.The length of the sequence must be equal to the rank of the array.One may refer to array elements using the function aref.Ex: (aref foo 2 1) refers to element (2,1) of the array.
  • 12.
    ArraysArraysMulti-dimensional arrays storetheir components in row-major orderInternally the multidimensional array is stored as a one-dimensional array, with the multidimensional index sets ordered lexicographically, last index varying fastest. This is important in 2 situations:When arrays with different dimensions share their contents, and
  • 13.
    When accessing very large arrays in virtual-memory implementation.A simple-array is one which is not displaced to another array, has no fill pointer, and is not to have its size adjusted dynamically after creation.
  • 14.
    ArraysArraysTo create anarray use the syntax:Make-array dimensions &key :element-type :initial-element :initial-contents: adjustable:fill-pointer: displaced to: displaced-index-offset.Ex: (make array ‘(4 2 3): initial contents ‘(((a b c) (1 2 3)) ((d e f) (3 1 2)) ((g h i) (2 3 1)) ((j k l) (0 0 0))))
  • 15.
    VectorsOne dimensional arrayis called vectors in lisp and constitute the type Lisp.Vectors and Lisps are collectively considered to be sequences.A general vectors is notated by notating the components in order sorrounded by #( and )Ex: #( a b c d ), #( ), #( 1 2 3 ) etc.
  • 16.
    StructuresStructures are instancesof user-defined data types that have a fixed number of named components.Structures are declared using the defstruct construct.The default notation for a structure is:#s(structure-name slot-name-1 slot-value-1 slot-name-2 slot-value-2 ……….)Where #s indicates structure syntax, structure name is the name(symbol) the structure type, each slot-name is the name of the component and each corresponding slot value is the representation of the lisp object in that slot.
  • 17.
    Hash tables providean efficient way of mapping any LIST object (a key) to an associate object.To work with hash tables CL provides the constructor function (make-hash-table) and the accessor function( get-hash).In order to look up a key and find the associated value, (use gethash)New entries are added to hash table using the setq and gethash functions.To remove an entry use remhash.Hash Tables
  • 18.
    Hash TablesEx: (setqa (make-hash-table)) (setf (gethash ‘color a) ‘black) (setq (gethash ‘name a) ‘fred)(Gethash ‘color a)black(gethash ‘name a)fred(gethash ‘pointy a)nil
  • 19.
    Hash TablesHash tablefunctionsSyntax: make-hash-table &key :test :size :rehash-size :rehash-threshold:test attribute determines how the attributes are compared, it must be one of the values( #’eq, #’eql, #’eql or one of the symbols(eq, eql, equal):size attribute sets the initial size of the hash table.:rehash-size argument specifies how much to increase the size of the hash table when it becomes full.:rehash-threshold specifies how full the hash table can be before it must grow.Ex: (make-hash-table: re-hash size 1.5 :size (* number-of-widgets 43))
  • 20.
    FunctionsFunctions are objectsthat can be invoked as procedures: These may take arguments and return values.A compiled function is a compiled-code object.A lambda-expression (a list whose car is the symbol lambda) may serve as a function.
  • 21.
    Data structuresCL operatorsfor manipulating lists as data structures are used for:Finding the length of the list
  • 22.
  • 23.
    Appending multiple liststogether to make a new list
  • 24.
    Extracting elements fromthe list to make a new list.Common lisp defines accessor function from first to tenth as a means of accessing the first ten elements of the list.Ex: (first ‘(a b c))A (third ‘(a b c))CUse the function nth to access an element from the arbitrary list.Ex: (nth 0 ‘(a b c))A (nth 1 ‘(a b c))B
  • 25.
    Data structuresData structuresTocheck if a particular object is lisp or not,CL provides Listp function.It always returns either T or NILEx: (listp ‘(pontaic cadillac chevrolet))T (listp 99)NILThe function Length is used to get the number of elements in List as an integers.Ex: (length ‘(pontaic cadillac chevrolet))3The member function is used to determine if the particular item is a member of the particular list.Ex: (member ‘dallas ‘(boston san-fransisco portland))NIL(member ‘san-fransisco’(boston san-fransisco portland))SAN-FRANSISCO PORTLAND