Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
39
Task/File-input-output/ACL2/file-input-output.acl2
Normal file
39
Task/File-input-output/ACL2/file-input-output.acl2
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
:set-state-ok t
|
||||
|
||||
(defun read-channel (channel limit state)
|
||||
(mv-let (ch state)
|
||||
(read-char$ channel state)
|
||||
(if (or (null ch)
|
||||
(zp limit))
|
||||
(let ((state (close-input-channel channel state)))
|
||||
(mv nil state))
|
||||
(mv-let (so-far state)
|
||||
(read-channel channel (1- limit) state)
|
||||
(mv (cons ch so-far) state)))))
|
||||
|
||||
(defun read-from-file (filename limit state)
|
||||
(mv-let (channel state)
|
||||
(open-input-channel filename :character state)
|
||||
(mv-let (contents state)
|
||||
(read-channel channel limit state)
|
||||
(mv (coerce contents 'string) state))))
|
||||
|
||||
(defun write-channel (channel cs state)
|
||||
(if (endp cs)
|
||||
(close-output-channel channel state)
|
||||
(let ((state (write-byte$ (char-code (first cs))
|
||||
channel state)))
|
||||
(let ((state (write-channel channel
|
||||
(rest cs)
|
||||
state)))
|
||||
state))))
|
||||
|
||||
(defun write-to-file (filename str state)
|
||||
(mv-let (channel state)
|
||||
(open-output-channel filename :byte state)
|
||||
(write-channel channel (coerce str 'list) state)))
|
||||
|
||||
(defun copy-file (in out state)
|
||||
(mv-let (contents state)
|
||||
(read-from-file in (expt 2 40) state)
|
||||
(write-to-file out contents state)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue