Subject: Re: newbie: non local exits in CL From: Erik Naggum <erik@naggum.no> Date: 1997/07/15 Newsgroups: comp.lang.lisp Message-ID: <3077972316866214@naggum.no> * Laurent Peron | I was thinking of CL idioms, readability, and maintainability. I have | not read much good CL code yet, and I am not sure of what is the | idiomatic way of expressing what I want to express. to become certain and to choose the right form by reflex will take a _very_ long time. however, idioms are not quite as necessary in Common Lisp as they are in, e.g., C++ and Perl. well, I guess it depends on what you call "idioms". is a functional programming style an "idiomatic" issue? to take an example I have been idly wondering about. suppose you have an Internet address as an integer. you want to produce a dotted-decimal form of it. suppose we have the following code: (defvar *network-byte-order* (list (byte 8 0) (byte 8 8) (byte 8 16) (byte 8 24)) "Bytes of an address in network byte order.") (defun dotted-decimal (address) "Return the dotted-decimal form of the IP address ADDRESS." (format nil "~{~D~^.~}" (mapcar #'ldb *network-byte-order* (list address address address address)))) now, is the `mapcar' form better written like this? (mapcar (lambda (byte) (ldb byte address)) *network-byte-order*) is a repeating list of the same elements better done with a function `repeatedly', as in (defun repeatedly (&rest x) (nconc x x)): (mapcar #'ldb *network-byte-order* (repeatedly address)) or is it better to use the straight-forward case: (defun dotted-decimal (address) "Return the dotted-decimal form of the IP address ADDRESS." (format nil "~D.~D.~D.~D" (ldb (byte 8 0) address) (ldb (byte 8 8) address) (ldb (byte 8 16) address) (ldb (byte 8 24) address))) I don't think such question have definite answers, but I'm not sure I'd rate this is as _idiomatic_ usage of CL. actually, the languages where I have heard "idiom" touted the most are Perl and C++, which sort of makes me wonder about the value of "idiom" mainly as a cover over bad language design, although I know this is unfair to good idioms. I'd suggest you just write working code and keep an open mind to new suggestions when you read code from others. above all, don't worry about it. (incidentally, I think the Year 2000 problem is one of idiom and pattern and failure to use the proper abstraction in dealing with input and output of machine representations of dates. computers never should have had to count the number of digits in a year representation. in my book, too much idiom and pattern is much worse than abstraction when people are blindly copying code.) see Richard P. Gabriel: Patterns of Software for an excellent treatment of the pros and cons of abstraction. I found it very refreshing and clear. #\Erik -- if DUI is "Driving Under the Influence" then GUI must be "Graphics Under the Influence"