Version: 4.1.4.1
2.5 "io-utilities"
(include-book "io-utilities" :dir :teachpacks)
Documentation under construction.
;;===== Module: io-utilities =================================================== |
;; |
;; Defining |
;; string-list->file write file |
;; file->string read file |
;; rat->str convert rational number to string |
;; str->rat convert string to rational number |
;; loc report LoC for specified file |
;; |
;; (string-list->file file-path list-of-strings state) |
;; Produces effect of writing strings to specified file, in sequence |
;; with newline-characters added at the end of each string |
;; Note: Directory separator in file-path string must be "/", not "\" |
;; Note: "Example functions" section shows how to use this function |
;; See: (wfoo state), (rwfoobar state) |
;; Note: Returns multiple value containing error status and state |
;; |
;; (file->string file-path state) |
;; delivers (mv string state) where string contains all characters in file |
;; Note: Directory separator in file-path string must be "/", not "\" |
;; Note: "Example functions" section shows how to use this function |
;; See: (rfoo state), (rwfoobar state) |
;; Note: Returns multiple value containing characters from file as |
;; string, error status, and state |
;; Warning! Virtual memory might be exhausted by reading really big files |
;; |
;; (rat->str r d) |
;; delivers string containing decimal representation of a rational |
;; number, r, with d decimal places digits following the decimal point |
;; |
;; (str->rat str) |
;; delivers rational number represented by str, a string of decimal digits, |
;; possibly containing a decimal point, and possibly with a leading +/- sign |
;; |
;; (loc file-path state) |
;; Reports number of lines of code in file specified by file-path (a string) |
;; Also reports state, which is annoying |
;;============================================================================== |
;;===== Function: (dgt->chr dgt) =============================================== |
;; |
;; Converts integer in 0-9 range to digit-character |
;; |
;; Pre : (member-equal dgt '(0 1 2 3 4 5 6 7 8 9)) |
;; Post: (member-equal (dgt->chr dgt) |
;; '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9) |
;; Note: defaults to #\0 if dgt is not a one-digit, nonnegative integer |
;;============================================================================== |
;;====== Function: (dgts->chrs dgts) =========================================== |
;; |
;; Converts every digit in a list to the corresponding character |
;; |
;; Pre : (and (integer-listp dgts) |
;; (implies (and (integerp d) (member d dgts)) |
;; (member d '(0 1 2 3 4 5 6 7 8 9))) |
;; Post: (implies (and (characterp c) (member c (dgts->char dgts))) |
;; (member c (#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9))) |
;;============================================================================== |
;;===== Function: (chr->dgt dgt-chr) =========================================== |
;; |
;; Converts a digit-character to the corresponding one-digit integer |
;; |
;; Pre : (member-equal dgt-chr '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)) |
;; Post: (member (char->dgt dgt-chr) '(0 1 2 3 4 5 6 7 8 9)) |
;; Note: defaults to 0 if dgt-chr is not a digit character |
;;============================================================================== |
;;====== Function: (chrs->dgts chrs) =========================================== |
;; |
;; Converts every digit in a list to the corresponding character |
;; |
;; Pre : (and (character-listp chrs) |
;; (implies (and (characterp c) (member c chrs)) |
;; (member c '(#\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9)) |
;; Post: (implies (and (integerp d) (member d (chrs->dgts chrs))) |
;; (member d '(0 1 2 3 4 5 6 7 8 9))) |
;;============================================================================== |
;;===== Function: (horner s x coefficients) ==================================== |
;; |
;; Computes s*(x^n) + polynomial in x with given coefficients |
;; where n = (length coefficients) |
;; Note: Coefficient list ordering is high-order to low-order |
;; That is, (nth k coefficients) is coefficient of x^(n - k - 1) |
;; where n = (length coefficients) - 1, k = 0, 1, ... n-1 |
;; |
;; Pre : (and (numberp s) (numberp x) (number-listp coefficients)) |
;; Post: (integerp (horner s x coefficients)) |
;;============================================================================== |
;;===== Function: (dgts->int dgts) ============================================= |
;; |
;; Delivers integer whose decimal digits comprise dgts (high-order to low-order) |
;; |
;; Pre : (implies (member-equal d dgts) |
;; (member-equal d '(0 1 2 3 4 5 6 7 8 9))) |
;; Post: (and (integerp (dgts->int dgts)) |
;; (>= (dgts->int dgts) 0)) |
;;============================================================================== |
;;===== Function: (int->append-dgts n dgts) ==================================== |
;; |
;; Append dgts to digits of decimal representation of n |
;; |
;; Pre: (and (integerp n) (>= n 0) |
;; (implies (member-equal d dgts) |
;; (member-equal d '(0 1 2 3 4 5 6 7 8 9)))) |
;; Post: (equal (dgts->int (int->append-dgts n nil)) |
;; n) |
;;============================================================================== |
;;===== Function: (int->dgts n) ================================================ |
;; |
;; Deliver digits of decimal representation of n |
;; |
;; Pre: (and (integerp n) (>= n 0)) |
;; Post: (equal (dgts->int (int->dgts n)) |
;; n) |
;;============================================================================== |
;;===== Function: (str->int str) =============================================== |
;; |
;; Returns integer represented by string |
;; |
;; Pre: (implies (member-equal chr (str->chrs str)) |
;; (member-equal chr '(#\0 #\1 #\2 ... #\9))) |
;; Post: (str->int str) is the integer specifed, in decimal notation, in str |
;;============================================================================== |
;;===== Function: (int->str n) ================================================= |
;; |
;; Returns string containing decimal representation of n |
;; |
;; Pre: (and (integerp n) |
;; (>= n 0)) |
;; Post: (equal (str->int (int->str n)) |
;; n) |
;;============================================================================== |
;;===== Function: (str->rat str) =============================================== |
;; |
;; Returns number whose decimal representation is str |
;; |
;; Pre: (and (implies (member chr (str->chrs str)) |
;; (or (member chr '(#\0 #\1 #\2 ... #\9)) |
;; (equal chr #\+) |
;; (equal chr #\-) |
;; (equal chr #\.)) |
;; (not (member #\+ (drop-past #\+ (str->chrs str)))) |
;; (not (member #\- (drop-past #\+ (str->chrs str)))) |
;; (not (member #\- (drop-past #\- (str->chrs str)))) |
;; (not (member #\+ (drop-past #\- (str->chrs str))))) |
;; Post: (and (rationalp (str->rat str)) |
;; (= (str->rat str) |
;; (str->rat (rat->str (str->rat str) (length str))))) |
;; Note: (equal (str->rat nil) 0) |
;; Note: Defaults to zero if str does not meet expectations |
;;============================================================================== |
;;===== Function: (rat->str r d) =========================================== |
;; |
;; Returns string containing decimal representation of r, to d decimal places |
;; |
;; Pre: (and (rationalp r) |
;; (integerp d) |
;; (>= d 0)) |
;; Post: (<= (abs(- (str->rat (rat->str r d)) |
;; r)) |
;; (/ 5 (expt 10 (+ d 1)))) |
;; Note: Defaults to "0" if parameters fail to meet expectations |
;;============================================================================== |
;;===== (read-n-chars n li channel state) ====================================== |
;; |
;; Inserts up to n characters from channel into li, leaving the new characters |
;; at the beginning of li in the reverse of the order in they were received in |
;; |
;; Pre : (and (integerp n) |
;; (>= n 0) |
;; (character-listp li) |
;; (character-input-channelp channel)) |
;; Post: Up to n characters have been received from channel |
;; Returns multiple value containing list of chars, channel, and state |
;;============================================================================== |
;;===== (write-all-strings strli channel state) ================================ |
;; |
;; Writes characters from each string in strli to channel |
;; (inserting a newline after the characters comprising each element of strli) |
;; |
;; Pre : (and (string-listp strli) |
;; (character-input-channelp channel)) |
;; Post: channel has received chars from strings in strli, plus newlines |
;; Returns multiple value containing channel and new state |
;;============================================================================== |
;;===== (file->string file-path state) ========================================= |
;; |
;; Makes character sequence comprising file accessible as string |
;; |
;; Pre : (character-listp file-path) |
;; Post: Characters in file become accessible as string portion |
;; of returned multiple value |
;; Returns multiple value: |
;; (1) string comprising first million characters from file |
;; (2) status (nil indicates success) |
;; (3) state |
;; Warning! System may run out of virtual memory when reading large files |
;; Warning! This function will not read files exceeding about 4GB |
;;============================================================================== |
;;===== (string-list->file list-of-strings file-path state) ==================== |
;; |
;; Writes strings to specified file, in sequence, and with |
;; newline characters added at the end of each string |
;; |
;; Pre: (and (string-listp list-of-strings) |
;; (character-listp file-path)) |
;; Post: Designated file contains characters from list-of-strings |
;; with newline characters inserted |
;; Returns multiple value: |
;; (1) status (nil indicates success) |
;; (2) state |
;;============================================================================== |
;;===== (loc file-path state) ================================================== |
;; |
;; Reports number of lines of code in file specified by file-path (a string) |
;; Also reports state, which is annoying |
;; |
;; Note: Lines consisting entirely of commentary or whitespace |
;; are not counted as lines of code |
;; Warning! Unix-style path names required ("dir/nam", not "dir\nam") |
;; WARNING! The input file must use Unix-style line-terminators. |
;; If you created the file using Notepad or Wordpad, |
;; you must convert it to Unix style, which you can do like this: |
;; dos2unix "some-program.lisp" |
;; Of course, you'll need to convet the file back to Windows style |
;; (unix2dos) when you want to edit it |
;; Sample usage: |
;; First: |
;; Copy file to be LoC-counted to a convenient place and convert to |
;; Unix-style line terminators, eg by using the following DOS commands |
;; copy "c:\Program Files\ACL2-2.8\Sources\Books\SE\io-utilities.lisp" c:\ |
;; dos2unix c:\io-utilities.lisp |
;; Then, in an ACL2 session: |
;; (include-book "C:/Program Files/ACL2-2.8/sources/books/SE/io-utilities") |
;; (set-state-ok t) |
;; :comp read-n-chars ; Warning! This cmd is for sessions only, not books |
;; (loc "c:/io-utilities.lisp" state) |
;; Response in ACL2 session: |
;; (177 <state>) |