2. overview Read function. Parsing of numbers and symbols Macro characters Input functions Output functions Querying the user
3. Printed representation Lisp presents a representation of most objects in printed representation which is used for input/output purposes. Functions such as print takes a lisp object and send the characters of its printed representation to a stream. The collection of routines that does this is called (Lisp)printer.
4. What read function accepts Lisp reader accepts characters, interpret them as a printed representation of the lisp object, and construct and return such an object. The reader can also be used as a lexical analyzer for a more general user-written parser. The reader is organized as a recursive descent parser.
5.
6. Constituent and escape characters are accumulated to make a token, which is then interpreted as number or symbol.
7. Macro characters trigger the invocation of the functions that can perform arbitrary parsing actions, including recursive invocation of the reader.Every character that appears in the input stream must be one of the following types: Illegal, whitespace, constituents ( [,],{,},?,and !) single escape, multiple escape or macro.
8. Parsing of numbers and symbols When an extended token is read, it is interpreted as a number or symbol. Whitespace, macro or escape character will always be treated as alphabetic within an extended token.
10. Token must satisfy the following requirements: It consists entirely of digits, signs (+ or -), ratio markers (/), decimal points(.), extension characters(^ or _), and number markers. It consists at least one digit. It begins with a digit, sign, decimal point, or extension character. It does not end with a sign. Ex: 1b5000, 777777q, 1.7J, ^-43^, 3.1.2.6 etc.
11. symbols The following are always treated as symbols: *read-base* The value of read base controls the interpretation of tokens by read as being integers or ratios. Its value is the radix in which the integers or ratios are to be read. The value must be any integer from 2 to 36,and it is normally 10. for ex if the *read-base* is set as 16(hexadecimal radix), variables with names such as a,b,f , bad and face will be treated by the reader as numbers. / /5 + 1+ 1- foo+ ab.cd - ^ ^/-
12. *read-supress*if this value is set as nil, the Lisp reader operates normally, when it is not null the most interesting operation of the reader are suppressed. *read-eval* its default value is always t, if *read-eval* is false. Reader macro signals an error.
13. Macro characters When a macro character is encountered, then the function associated with that macro is invoked and may produce an object to be returned. Macro characters are normally defined as follows: The left parenthesis initiates reading a pair of list. The function read is called recursively to read successive objects until a right parenthesis is found to be next in the input stream. A list of objects read are returned.
14. ‘ single-quote provides an abbreviation to make it easier to put constants in the programs. ; is used to write comments. “ double-quote character represents the printed representation of a string. A back-quote is followed by a template, a picture of a data structure to be built. # is dispatching macro-character. It reads an optional digit string and then one more character, and uses that character to select a function to run as a macro-character function.
15. Standard dispatching macro character syntax # reads in a character object that represents a character x. #ame1 reads in as the character object whose name is name1. The name1 should have the syntax of the symbol. # ’ is an abbreviation for (function foo) A series of representations of objects enclosed by #( and )is read as a simple vector of those objects. If unsigned decimal integer appears between the # and (, it specifies explicitly the length of the vector.
16. #:foo requires foo to have a syntax of an unqualified symbol name. It denotes an uninterened symbol whose name is foo. Every time an uninterended symbol is created when this symbol is encountered. #,foo is read as the object resulting from the evaluation of the lisp object represented by foo, which may be the printed representation of any lisp object. #B reads rational in binary(radix 2) ex:#B110113 #o reads rational in octal(radix 8) ex: #o777511 #X reads rational in hexadecimal(radix 16) ex: #xFoo3840
17. #nA constructs an n-dimensional array Ex: #2A ((0 1 5) (foo 2(hot dog))) represents a 2 cross 3 matrix: 0 1 5 f00 2 (hot dog) #s (name slot1 value1 slot2 value2….) denotes a structure. #+ syntax provides a read time conditionality facility; the syntax is #+feature form #- form is equivalent to #+(not feature) form. If feature is true, then this syntax represents a lisp object whose printed representation is form. If the feature is false, then this syntax is effectively white space.
18. The following names are standards across all implementations: Newline, space Rubout delete character Page the form-feed or page-separator character Tab the tabulate character Return carriage return character Linefeed the line-feed character
19. Read table Read table is the data structure used to control the reader. It has information about the syntax of each character. *read-table* is the current read table To program the reader for a different syntax, begin with the copy of the standard common lisp read table and then customize the individual characters within the copy. Copy-readtable &optional from-readtable to read-table
20. readtable case readtable is a function used to control the readers interpretation of the case. It provides access to a slot in the read table. The possible values of the slots are: :upcase replaceable characters are converted to upper case :downcase replaceable characters are converted into lower case :preserve the cases of all characters remain unchanged :invert all replicable characters of same case are converted to opposite case
23. If eof-error-p is true , an error will be signaled at the end of the file. If it is false, then no error is signaled, instead it returns eof-value.
24.
25.
26. Output functions that operate on stream of functions These functions take an optional argument output-stream(defaults to variable *standard-output*) on where to send the output. write object &key :stream :escape :radix :base :circle :pretty :level :length :case :gensym :array: readable: right-margin :miser-width :lines and :pprint-dispatch the printed representation of the object is written to the output stream specified by :stream, which defaults to the value *standard-output* The other keyword arguments specify values used to control the generation of the printed representation.
27. Prin1 object &optional output-stream prin1 outputs the printed representation of object to output-stream. Print object &optional output-stream printed representation of the object is preceded by newline and followed by a space. PPrin1 object &optional output-stream trailing space is omitted and the object is printed with the *print-pretty* flag non-nil to produce “pretty” output. Princ object &optional output-stream Is similar to prin1 except that the output has no escape characters.
28. Write-char character &optional output-stream outputs the character to the output stream and returns the character Write-string string &optional output-stream &key :start :end Write-line string &optional output-stream &key :start :end writes the character of the specified substring to the output-stream. The :start and :end delimit a substring of string in usual manner. write-lined does the same thing but then outputs a new-line afterwards.
29.
30.
31. ~D, An arg, should be an integer is printed in decimal radix. Few examples for format function: (format nil “foo”) “foo” (setq x 5) (format nil “The answer is ~D.”, x)”The answer is 5.” (format nil “The answer is ~3D.”, x) “The answer is 5.”
32. Querying the user The following functions provide a convenient interface for asking the questions of the user. y-or-n-p &optional format-string &rest arguments This predicate is used for asking the user a question whose answer is either yes or no. It types a message if supplied. All input and output is performed using the stream in the global variable *query-io*
33. Ex: (y-or-n-p “Produce Listing file?”) opens a pop-up asking “Produce Listing file?” with two options “Yes” and ‘no”. Returns T on yes else returns NIL. (y-or-n-p “Cannot connect to network host ~S. Retry?” host) Y-or-n-p must be used when the user waiting to be questioned before preceding further.