Allegro CL Certification Program

Slides:



Advertisements
Similar presentations
Introduction to LISP Programming of Pathway Tools Queries and Updates.
Advertisements

CS 63 LISP Philip Greenspun's Tenth* Rule of Programming:
ANSI Common Lisp 3. Lists 20 June Lists Conses List Functions Trees Sets Stacks Dotted Lists Assoc-lists.
C-LISP. LISP 2 Lisp was invented by John McCarthy in 1958 while he was at the Massachusetts Institute of Technology (MIT).John McCarthyMassachusetts Institute.
Lists in Lisp and Scheme a. Lists are Lisp’s fundamental data structures, but there are others – Arrays, characters, strings, etc. – Common Lisp has moved.
1 Programming Languages and Paradigms Lisp Programming.
Chapter 3 Functional Programming. Outline Introduction to functional programming Scheme: an untyped functional programming language.
Lisp – Introduction יעל נצר מערכות נבונות סמסטר ב' תשס"ו.
First Lecture on Introductory Lisp Yun Peng. Why Lisp? Because it’s the most widely used AI programming language Because AI researchers and theoreticians.
CMSC 471 LISP. Why Lisp? Because it’s the most widely used AI programming language Because it’s good for writing production software (Graham article)
Introductory Lisp Programming Lecture # 2 Main Topics –Basic Lisp data types –Lisp primitives –Details of list handling Cons cells (boxes) & their representation.
Artificial Intelligence and Lisp Lecture 6 LiU Course TDDC65 Autumn Semester, 2010
LISP A brief overview. Lisp stands for “LISt Process” –Invented by John McCarthy (1958) –Simple data structure (atoms and lists) –Heavy use of recursion.
COMP 205 – Week 11 Dr. Chunbo Chu. Intro Lisp stands for “LISt Process” Invented by John McCarthy (1958) Simple data structure (atoms and lists) Heavy.
LISP 1.5 and beyond A very quick tour. Data Atoms (symbols) including numbers – All types of numbers including Roman! (well, in the early days) – Syntactically.
Allegro CL Certification Program Lisp Programming Series Level I Session Top Ten Things to Know.
Functional Programming
Input/Output Chapters 7 & 9. Output n Print produces output > (print 100) n It also returns the value it printed –that’s where the second 100 came.
PRACTICAL COMMON LISP Peter Seibel 1.
PRACTICAL COMMON LISP Peter Seibel 1.
Mitthögskolan 10/8/ Common Lisp LISTS. Mitthögskolan 10/8/2015 2Lists n Lists are one of the fundamental data structures in Lisp. n However, it.
1 Lists in Lisp and Scheme. 2 Lists are Lisp’s fundamental data structures. Lists are Lisp’s fundamental data structures. However, it is not the only.
Common Lisp Macros Read for Input Macros Macro lifetime Macro syntax
1 Lisp Functions –Built-in functions –Defining functions –Function Evaluation and Special Forms defun, if Control statements –Conditional if, cond –Repetition.
1 More About Lisp. 2 Functions on Lists (setf x '(a b c)) => (A B C) (setf y '(1 2 3)) => (1 2 3) (rest x) => (B C) ;;all but the first element (nth 1.
06 INPUT AND OUTPUT Functional Programming. Streams Two kinds of streams  Character streams  Binary streams Character streams are Lisp objects representing.
Lisp Files, Arrays, and Macros CIS 479/579 Bruce R. Maxim UM-Dearborn.
Programming in Lisp; Instructor: Alok Mehta Programming in Lisp Introduction to Lisp.
LISP Data Types Functional Programming Academic Year Alessandro Cimatti
11 Speed & Debug.  Lisp is really two languages:  A language for writing fast programs  A language for writing programs fast  In the early stage,
UMBC CMSC Common Lisp II. UMBC CMSC Input and Output Print is the most primitive output function > (print (list 'foo 'bar)) (FOO BAR) The.
PRACTICAL COMMON LISP Peter Seibel 1.
Milos Hauskrecht (PDF) Hieu D. Vu (PPT) LISP PROGARMMING LANGUAGE.
1 Variable Declarations Global and special variables – (defvar …) – (defparameter …) – (defconstant …) – (setq var2 (list 4 5)) – (setf …) Local variables.
PRACTICAL COMMON LISP Peter Seibel 1.
C Programming Day 2. 2 Copyright © 2005, Infosys Technologies Ltd ER/CORP/CRS/LA07/003 Version No. 1.0 Union –mechanism to create user defined data types.
LISP LISt Processing. History & Overview b b One of the oldest high level programming languages. b b First developed in 1958 by John McCarthy. b b Later.
1 Outline Review Introduction to LISP Symbols and Numbers Lists Writing LISP Functions LISPWorks.
Artificial Intelligence and Lisp Lecture 6 LiU Course TDDC65 Autumn Semester,
Containers and Lists CIS 40 – Introduction to Programming in Python
Modern Programming Languages Lecture 20 Fakhar Lodhi
Data Structures in Lisp
Lists in Lisp and Scheme
LISP LISt Processing.
LISP A brief overview.
Variables In programming, we often need to have places to store data. These receptacles are called variables. They are called that because they can change.
“The fastest I/O is no I/O.” Nils-Peter Nelson, Bell Labs
Topics Introduction to File Input and Output
Introduction to C++ Programming
Allegro CL Certification Program
First Lecture on Introductory Lisp
J.E. Spragg Mitthögskolan 1997
Imperative Data Structures
Modern Programming Languages Lecture 21 Fakhar Lodhi
Modern Programming Languages Lecture 20 Fakhar Lodhi
LISP A brief overview.
CHAPTER 3: String And Numeric Data In Python
Peter Seibel Practical Common Lisp Peter Seibel
LISP LISt Processing.
Abstraction and Repetition
Data Structures in Lisp
Data Structures in Lisp
LISP LISt Processing.
Modern Programming Languages Lecture 18 Fakhar Lodhi
Common Lisp II.
Topics Introduction to File Input and Output
Allegro CL Certification Program
LISP primitives on sequences
Lists in Lisp and Scheme
Procedures with optional parameters which do not require matching arguments Example: consider the exponent function which may take one argument, m, in.
Presentation transcript:

Allegro CL Certification Program Lisp Programming Series Level I Session 1.3.1 Manipulating Lists David Margolies 1/3/2019

What is a List? An ordered (possibly empty) collection of things in a particular format (a b c) a b c nil 1/3/2019

CONS an object with two components function CONS allocates one first (car) rest (cdr) function CONS allocates one (cons ‘a 7) -> (a . 7) (cons 'a NIL) -> (a) (cons 'a (cons 'b (cons 'c NIL))) -> (a b c) 1/3/2019

Definition of a list symbol NIL, which represents the empty list cons whose cdr is a list (cons ‘a (cons ‘b nil)) -> (a b) 1/3/2019

The Empty List NIL () NIL evaluates to itself (car nil) => nil (cdr nil) => nil 1/3/2019

Making a List (list 'boston 'distance (* speed time)) ;; When the elements are all the same: (make-list 3 :initial-element 'denver) (DENVER DENVER DENVER) 1/3/2019

Uses for lists Lists can be simple or have structure association list ((a 1) (b 2) (c 3)) ((a . 1) (b . 2) (c . 3)) ((a 1 mary) (b 2 donna)…(w 7 henry)) associates a key with a value property list (:a 1 :b 2 :c 3) another way of associating a key with a value 1/3/2019

Overview of Lists Lists are an extremely useful data structure Size is unbounded (except by memory constraints) In other languages you must write your own list primitives Since lists are so fundamental to Lisp there are many built functions to manipulate lists 1/3/2019

Simple List Operations (first '(a b c)) --> A (first nil) --> nil (rest '(a b c)) --> (B C) (rest nil) --> nil (second '(a b c)) --> B equivalent to (first (rest '(a b c))) (third '(a b c)) --> C (second nil) --> nil (third nil) --> nil 1/3/2019

Simple List Operations cont’d (nth 0 ‘(a b c)) => a (nth 2 ‘(a b c)) => c (nth 5 '(a b c)) => nil (length '(power gnd clk1 clk2)) --> 4 (length NIL) --> 0 1/3/2019

Member of a list (member 'dallas '(boston san-francisco portland)) --> NIL (member 'boston '(boston san-francisco portland)) --> (BOSTON SAN-FRANCISCO PORTLAND) (member 'portland ‘(boston san-francisco portland)) --> (PORTLAND) Anything other than NIL is TRUE 1/3/2019

Set Operations (union '(1 2 3) '(2 3 4)) --> (1 2 3 4) (intersection '(1 2 3) '(2 3 4)) --> (2 3) (set-difference '(1 2 3 4) '(2 3)) --> (4 1) 1/3/2019

car/cdr combinations old names can be combined, e.g. can be written as (setq foo '(1 2 3)) (car (cdr foo)) 2 can be written as (cadr foo) occasionally see combinations up to 4 a’s and d’s 1/3/2019

copy-list Copy a list > (setq a '(1 2 3 4)) (1 2 3 4) > (setq b (copy-list a)) > (eq a b) NIL > (equal a b) T 1/3/2019

What about copy-list (setf x ‘(a b c)) (setf y (copy-list x)) x a b c nil 1/3/2019

What about copy-list cont’d (setf x ‘(a (b) c)) (setf y (copy-list x)) x nil a c y b 1/3/2019

last Returns the last CONS of a list. Result is NOT the last element. Optional count arg, returns nth from last > (setq a '(1 2 3 4)) (1 2 3 4) > (last a) (4) > (last a 2) (3 4) > (car (last a 2)) 3 1/3/2019

append Appends lists Copies all args except last > (setq a '(1 2 3 4)) (1 2 3 4) > (setq b '(5 6)) (5 6) > (setq c '(7)) (7) > (setq d (append a b c)) (1 2 3 4 5 6 7) 1/3/2019

nconc Destructive append > (setq a '(1 2 3)) (1 2 3) > (setq b '(4 5 6)) (4 5 6) > (setq c (nconc a b)) (1 2 3 4 5 6) > c > b > a 1/3/2019

rplaca rplaca x y - Changes first of x to y (setf (first x) y) is equivalent > (setq a (list 1 2 3)) (1 2 3) > (rplaca a 4) (4 2 3) > a 1/3/2019

rplacd Rplacd x y - Replaces the rest of x with y (setf (rest x) y) is equivalent > (setq a '(1 2 3)) (1 2 3) > (rplacd a '(8 9)) (1 8 9) > a 1/3/2019

Pushing and Popping (setq *my-network* '(power gnd input)) (push 'clk1 *my-network*) (CLK1 POWER GND INPUT) *my-network* (pop *my-network*) CLK1 1/3/2019

SETF setq only takes a symbol as first argument setf takes a form that if executed would access a value called a generalized reference accessor if called by itself would retrieve a value setf of a generalized reference stores a replacement value (setq a (list 'red 'green 'blue)) (setf (second a) ‘magenta) 1/3/2019

push Push item onto place place is a generalized reference to a list > (setq a (list 1 (list 2 3))) (1 (2 3)) > (push ‘x a ) (x 1 (2 3)) > a > (push 9 (third a)) (9 2 3) (x 1 (9 2 3)) 1/3/2019

pushnew Push if it isn’t there already > (setq a (list 1 (2 3) (4 5))) (1 (2 3) (4 5)) > (pushnew 9 (second a)) (9 2 3) > a (1 (9 2 3) (4 5)) 1/3/2019

More on copies (setf x '((b) a c)) (setf y (copy-list x)) x nil a c y 1/3/2019

We set some values (setq x '((b) a c)) (setq y (copy-list x)) y => ((b) a c) (setf (second x) 'k) => k x => ((b) k c) (setf (car (first y)) 'm) => m x => ((m) k c) y => ((m) a c) 1/3/2019

More on copies x => ((m) k c) y => ((m) a c) x k nil c y a m 1/3/2019

Printing lists *print-level*, *print-length* control printing depth and length (number or nil for no restriction) In ACL, tpl:*print-level*, tpl:*print-length* control top-level printing PPRINT always prints the whole list Do not set top-level variables to nil 1/3/2019

List printing example (setq lis ‘(a (b (c (d (e))))) 2 3 4 5 6 7 8 9 10 11)) ((a (b (c (d #)))) 2 3 4 5 6 7 8 9 10 ...) cg-user(25): (print lis) ((a (b (c (d (e))))) 2 3 4 5 6 7 8 9 10 11) cg-user(26): (pprint lis) cg-user(27): 1/3/2019

Allegro CL Certification Program Lisp Programming Series Level I Session 1.3.2 Numbers 1/3/2019

Many types of numbers Integers Ratios, 7/3 fixnum, 123 bignum, 123123123123123123123123123123 automatically change from one to other as needed Ratios, 7/3 Float, 2.333333333333, 8.4e2 Complex, #c(0 1), #c(7.3 4.5) 1/3/2019

Type Hierarchy 1/3/2019

fixnum most-positive-fixnum most-negative-fixnum efficiently maps into underlying hardware’s integer operations 1/3/2019

Type examples (typep (+ most-positive-fixnum 1) ‘bignum) --> T (typep 1 ‘fixnum) --> T 1/3/2019

Arithmetic operations are generic Operate on all appropriate numeric types Coerce to appropriate types rational canonicalization floating point contagion complex contagion complex canonicalization 1/3/2019

floats 1.234e7 and 12340000.0 are read in the float format which is the value of *read-default-float-format* s, f, d, or l in place of e gets specific type Limit variables most- or least- -negative- or -positive- float type (short-float, single-float, double-float, long-float) 1/3/2019

“Conversion” functions Float - maps a real number to a floating point number truncate, round, floor, ceiling - map to integers 1/3/2019

float (float 1) --> 1.0 (float 2/3) --> 0.6666667 (float 2/3 1.0d0) --> 0.6666666666666666d0 (float 0.666667 1.0d0) --> 0.6666666865348816d0 1/3/2019

Floor, round, ... floor -- truncates toward negative infinity ceiling -- truncates toward positive infinity truncate -- truncates toward 0 round -- nearest integer, if halfway to even 1/3/2019

Examples (floor 2.5) --> 2 (floor -2.5) --> -3 (ceiling 2.5) --> 3 (ceiling -2.5) --> -2 (truncate 2.5) --> 2 (truncate -2.5) --> -2 (round 2.49) --> 2 (round 2.51) --> 3 (round 2.5) --> 2 (round -2.5) --> -2 (round 1.5) --> 2 (round -1.5) --> -2 1/3/2019

floor and related functions Take a second, optional, argument which is a number by which to divide the first argument; defaults to 1 return two values integer part remainder 1/3/2019

Examples > (floor 5 2) 2 1 > (floor 5.0 2) 1.0 2/5 1/3/2019

Ratios no loss of precision > (numerator 7/3) 7 >denominator 7/3) 3 > (/ 5 2) 5/2 > (/ 5 2.0) 2.5 1/3/2019

Complex numbers (complex 0 1) --> #c(0 1) (complex 1 0) --> 1 (realpart #c(0 1)) --> 0 (imagpart #c(0 1)) --> 1 The components of the complex number can be any type of real number 1/3/2019

Math Fns (expt x n) --> x^n (log x n) (log x) ;log base e (exp x) --> e^x (sqrt x) (isqrt x) 1/3/2019

Trig Fns (sin theta-in-radians) (cos theta-in-radians) (tan theta-in-radians) 1/3/2019

incf and decf Example > (setq a 5) 5 > (incf a) ; equivalent to (setf a (+ a 1)) 6 > (incf a 4) ; equivalent to (setf a (+ a 4)) 10 > (decf a) ; equivalent to (setf a (- a 1)) 9 1/3/2019

Digression on macroexpansion Incf and decf are macros (as are push and pop) macroexpand transforms a macro call into underlying code cg-user(29): (setq a 1) 1 cg-user(30): (macroexpand '(incf a)) (setq a (+ a 1)) t cg-user(31): 1/3/2019

Allegro CL Certification Program Lisp Programming Series Level I Session 1.3.3 Data Structures 1/3/2019

Type functions (type-of <object>) --> most specific type (typep <object> <type>) --> T or nil 1/3/2019

Some data structure types lists (chains of CONS cells) arrays hash-tables CLOS classes structures 1/3/2019

Arrays Implementation must allow at least 8 dimensions - array-rank-limit at least 1024 elements per dimension array-dimension-limit can either store general objects (of type T) or more specialized objects arrays of characters arrays of single-floats or of double-floats 1/3/2019

Array examples > (setf arr (make-array '(2 3) :initial-element nil)) #2A((NIL NIL NIL) (NIL NIL NIL)) > (aref arr 0 0) NIL > (setf (aref arr 0 0) 'b) B > arr #2A((B NIL NIL) (NIL NIL NIL)) 1/3/2019

Vectors Vectors are 1-dimensional arrays > (setf vec (make-array 4 :initial-element 0)) #(0 0 0 0) > vec > (setf vec (vector "a" 'b 5)) #("a" B 5) > (aref vec 2) 5 > (svref vec 2) 1/3/2019

Strings Strings are vectors of characters access with char function > (setf string1 "abc”) "abc" > (aref string1 1) #\b > (char string1 1) > (char string1 0) #\a > (setf (char string1 2) #\Z) #\Z > string1 "abZ" 1/3/2019

String Functions 1 string-equal string-lessp string-greaterp > (string= "foo" "Foo") NIL > (string-equal "foo" "Foo") T 1/3/2019

String Functions 2 (string-trim '(#\space) " five ten ") "five ten“ " $5.73, $8.40 ") "5.73, $8.40" (string-upcase “five”) “FIVE” (string-capitalize “five”) “Five” (string ‘five) 1/3/2019

String Functions 3 ;; Alphabetizing strings: (string< “apples” “bananas”) ;; Also string>, string<=, string>=, string/= (string< “this” “that”) nil (string> “this” “that”) 2 (string< “abc” “abcd”) 3 1/3/2019

Sequence Functions What are sequences? Lists Vectors (and therefore strings) Some of the list functions already mentioned are sequence functions 1/3/2019

List vs Vector pros and cons List pros Easy to allocate a small piece of list structure and splice it in Have to allocate whole vector at one time List cons Takes time proportional to n to get nth member can’t go back to previous element from one element 1/3/2019

elt Sequence function similar to aref, svref, char > (elt '(a b c) 1) B > (elt "abc" 1) #\b > (elt (vector 1 2 3) 1) 2 > (elt nil 1) ERROR 1/3/2019

position Returns the position of its first argument in the sequence which is its second argument Examples: > (position #\r "microprocessor") 3 > (position #\r "microprocessor" :from-end t) 13 > (position 'b '(a b c)) 1 1/3/2019

find Searches for an item in a sequence Returns the item found > (find #\a "cat") #\a > (find 1000 '( 1 2 4 8 1000)) 1000 > (find 5 '(1 2 3 4 1000)) NIL 1/3/2019

find cont’d > (find 17 '(13 61 34 33 45)) NIL > (find 17 '(13 61 34 33 45) :test '<) 61 > (defun is-double-of (num1 num2) (= (* 2 num1) num2)) is-double-of > (find 17 '(13 61 34 33 45) :test ’is-double-of) 34 > (defun car-is-double-of (num-arg list-arg) (= (* 2 num-arg) (car list-arg))) car-is-double-of > (find 17 ’((13 31) (61 16) (34 43) (33 33)) :test ’car-is-double-of) (34 43) 1/3/2019

Search: find a subsequence match (search “abc” “123abc456”) returns 3 (location of beginning of seq1 in seq2) returns nil if no match subsequence must not have intervening elements: (search ’(a b c) ’(a 1 b 2 c)) -> nil 1/3/2019

Getting part of a sequence (subseq '(a b c d) 1 ) --> (B C D) (subseq '(a b c d) 1 2) --> (B) 1/3/2019

Kinds of sequence operations Non-destructive copies top level of list Destructive modifies how list elements are hooked together 1/3/2019

Sorting (sort '(1 3 5 7 2 4 6) '<) --> (1 2 3 4 5 6 7) sort is a destructive operation You want to capture the result I.e. (setq a (sort a ‘<)) 1/3/2019

remove Removes items from a sequence non-destructively, i.e. copies the sequence > (setq a '(1 2 3 4 3 2 1)) (1 2 3 4 3 2 1) > (remove 2 a) (1 3 4 3 1) > a 1/3/2019

delete Removes items from a sequence destructively, i.e. splices the sequence > (setq a (list 1 2 3 4 3 2 1)) (1 2 3 4 3 2 1) > (setq a (delete 2 a)) (1 3 4 3 1) > a > (delete 1 a) (3 4 3) (1 3 4 3) 1/3/2019

remove-duplicates Also a sequence fn: > (remove-duplicates "abracadabra") "cdbra” > (remove-duplicates "abracadabra” :from-end t) "abrcd " > (remove-duplicates '(a a b 5 7 7 "hello")) (A B 5 7 "hello") 1/3/2019

delete-duplicates Delete duplicates destructively > (setq a (list 1 2 3 4 4 5 5 6)) (1 2 3 4 4 5 5 6) > (delete-duplicates a) (1 2 3 4 5 6) > a 1/3/2019

reverse Returns a sequence in which the order of the elements in the argument sequence is reversed > (setq a '(1 2 3 4)) (1 2 3 4) > (reverse a) (4 3 2 1) > a 1/3/2019

nreverse Destructive version of reverse > (setq a (list 1 2 3 4)) (1 2 3 4) > (nreverse a) (4 3 2 1) > a (1) 1/3/2019

Allegro CL Certification Program Lisp Programming Series Level I Session 1.3.4 Streams and Files 1/3/2019

Streams A stream is an object that is a source of input and/or a destination for output Types of streams include: streams to and/or from the terminal window streams to and/or from a character or binary file streams to and/or from an X window or Windows window socket streams 1/3/2019

With-open-file example (with-open-file (I “foo.lisp”) (loop (let ((line (read-line I nil nil))) (if (eq1 line nil) (return)) (write-line line *standard-output*)))) 1/3/2019

Standardized Stream Variables *standard-input* Default stream for read-line, read-char, read, etc. *standard-output* Default stream for write-line, write-string,print, etc. *terminal-io* Value is ordinarily connected to the user’s console Useful place to print log messages and warnings *trace-output* Default steam for trace utility *query-io* Default stream for stream-y-or-n-p 1/3/2019

Create file streams using OPEN arguments are filename and keyword arguments :direction -- :input, :output, :IO, or :probe :element-type -- :character or ‘(unsigned-byte 8) :if-does-not-exist -- :error , :create, or nil :if-exists -- :supersede, :overwrite, :error, :append or nil returns stream object 1/3/2019

File streams must be closed (close stream) File may appear to be empty until you close it With-open-file is the preferred way to open and close a stream (let ((stream (open “c:\\junk.txt” :direction :output))) (print ‘hello-world stream) (close stream)) ;; Or equivalently: (with-open-file (stream “c:\\junk.txt” :direction :output) (print ‘hello-world stream)) 1/3/2019

Reading Lines You often have to parse data that is not already in Lisp format. A standard way to parse text data is to read it as strings with read-line: read-line arguments: &optional stream eof-error-p eof-value recursive-p (read-line stream) => “Four score and seven “ ;; Signals an error when EOF is reached (read-line stream nil nil) ;; Returns NIL when EOF is reached 1/3/2019

Read-line example File data: ====>Mail arrives Jun 23 13:51:40 xxx.some.com sendmail[14867]: [ID 822293 mail.info] i5NIpeJu014867: from=<user2@some.com>, size=6554, msgid=<B34440A345677F5F480CA4C4E3C54B@officer.corp.some.com>, proto=SMTP, ... 1/3/2019

Read the text (let ((text "") line from id f1 f2 i1 i2) (block reading (loop (setq line (read-line stream nil nil)) (if line (setq text (concatenate ‘string text line)) (return-from reading)))) ;; now TEXT is a string containing ;; all message lines 1/3/2019

Parse the text (setq f1 (+ 6 (search "from=<" text))) (setq f2 (position #\> text :start f1)) (setq from (subseq text f1 f2)) (setq i1 (+ 7 (search "msgid=<" text))) (setq i2 (position #\> text :start i1)) (setq id (subseq text i1 i2)) (values from id) ) ;; closes off let form user2@some.com B34440A345677F5F480CA4C4E3C54B@officer.corp.some.com 1/3/2019

Writing Lines write-line: arguments: string &optional stream &key start end (write-line "We hold these truths " stream) ;; Writes text and newline marker stream :start 0 :end 3) ;; Writes 'We ' and newline marker 1/3/2019

Reading and Writing Characters (write-string “Hello world” stream) ;; Writes string but no newline (read-char stream) => #\H ;; Reads a single character (write-char #\H stream) ;; Writes a single character (terpri stream) ;; Writes a newline 1/3/2019

Object Input and Output (write object stream) ;; Outputs the print representation of OBJECT. :: Returns its object argument. (read stream) ;; Reads an object from an ascii stream ;; Most objects are print-read compatible: ;; Lists, numbers, strings, symbols, vectors, ;; arrays, lisp source code. 1/3/2019

Other Ways to Write Using the function WRITE is rather uncommon ; print readably with prepended #\newline (print “Five” stream) “Five” ; print readably, without prepended #\newline (prin1 “Five” stream) ; print it pretty (princ “Five” stream) Five 1/3/2019

Binary Streams (with-open-file (stream “c:\\junk.bin” :direction :output :element-type ‘(unsigned-byte 8)) (write-byte 255 stream)) (read-byte stream)) 1/3/2019

Pathnames A pathname is an object #p"<namestring>" File stream creating and file functions use pathnames as arguments 1/3/2019

Using pathnames > (setq p (pathname > (pathname-name p) "c:\\windows\\system\\user32.dll")) #p"c:\\windows\\system\\user32.dll" > (pathname-name p) "user32" > (pathname-type p) "dll" >(pathname-version p) :unspecific 1/3/2019

Using pathnames cont’d > (pathname-directory p) (:absolute " windows " " system ”) > (pathname-host p) nil > (pathname-device p) " c " 1/3/2019

A Word on Backslash The backslash character(\) is used to “escape” the next character in a string or symbol “His friend was \”curious\”.” “c:\\windows\\system\\user32.dll” ‘test\a => |TESTa| 1/3/2019

Make-pathname (make-pathname :device “C” :name “user32” :type “dll” : directory ‘(:absolute “windows” “system”)) #p”c:\\windows\\system\user32.dll” 1/3/2019

merge-pathnames Missing fields in first argument are provided by second argument (merge-pathname (make-pathname :name “odbc”) #p”c:\\windows\\system\\user32.dll”) #p”c:\\widows\\system\\odbc.dll” Second argument defaults to the value of *default-pathname-defaults* 1/3/2019

File Operations rename-file -- original new delete-file probe-file -- returns true if file is there (actual return value is truename of file) file-write-date directory -- list of pathnames in directory load -- loads a lisp source of fasl file 1/3/2019

Directory Operation (directory "C:/windows/") Returns a list of directory contents 1/3/2019

This was the last class Lecture notes and homework available, online at http://www.franz.com/lab/ One-on-one help via email at training@franz.com 1/3/2019