Subject: Re: read-sequence & ACL From: Erik Naggum <firstname.lastname@example.org> Date: 1998/12/24 Newsgroups: comp.lang.lisp Message-ID: <email@example.com> * Sam Steingold <firstname.lastname@example.org> | `read-sequence' is under-specified: it is unclear whether it reads bytes | or chars, so ACL5 refuses to read-sequence from a socket to a vector of | unsigned-byte. Sam Steingold is under-intelligent: it is unclear whether he can read a single bit of documentation, or, god forbid, a sequence of characters, so ACL 5.0 refuses to do what he tries to pound it into doing. but since it's Christmas, let's even help the retarded with Common Lisp questions. | is there a way around this? yeah, there actually is. you could (re)boot your brain, read the very good documentation and the standard, think for maybe 14 ms if you're really slow, and then not post the same stupid question anymore since you would have understood the point. oh, you meant around _your_ problem. well, my suggestion actually works for yours, too. but, in the spirit of Christmas and all, here's a gift quote from the Description clause in the standard under READ-SEQUENCE: Destructively modifies sequence by replacing the elements of sequence bounded by start and end with elements read from stream. "element" is a glossary term. let's look it up. aaah, there's a special case just for us! that's _so_ nice, don't you think? now, read it. element n. ... 5. (of an input stream) a character or number (as appropriate to the element type of the stream) that is among the ordered series of objects that can be read from the stream (using read-char or read-byte, as appropriate to the stream). and here's _another_ sentence, now in the Exceptional Situations clause in the standard under READ-SEQUENCE: Might signal an error of type type-error if an element read from the stream is not a member of the element type of the sequence. what _could_ this _possibly_ mean? could it be that element types of streams and sequences have to agree? nah, that would be quite smart, and some people just _aren't_ smart at all, now, are they? just getting the idea that objects in Common Lisp are _typed_ and that type mismatches are fixable by getting the types right is obviously too much for some people. | what do I do? well, since you appear to be the kind of guy who copies examples instead of understanding them, and I'm nice to you today, it being Christmas and all, here's one example so trivial that even copyright protection won't apply to it. it has worked as long as I have used Allegro CL, i.e., from 4.3 through 5.0: (let ((universal-time (make-array 4 :element-type '(unsigned-byte 8)))) (with-open-stream (time (socket:make-socket :FORMAT :BINARY :remote-host "127.1" :remote-port "time")) (read-sequence universal-time time)) universal-time) please excuse the lack of boldface. I have tried to highlight the important aspect of this example with uppercase letters, instead. I hope that is sufficient for you when you copy the example. feel free to complain about case insensitivity, by the way, if the example doesn't work until you downcase the two symbols. | [CLISP provides lisp:read-byte-sequence and lisp:read-char-sequence for | this exact purpose.] another great disservice to the Common Lisp community from CLISP, by people who don't really understand what's going on around them. #:Erik -- Nie wieder KrF! Nie wieder KrF! Nie wieder KrF! Nie wieder KrF!