Subject: Re: Testing for function equality
From: Erik Naggum <erik@naggum.net>
Date: Sun, 02 Jun 2002 22:30:48 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3232045833521876@naggum.net>

* "Matthew X. Economou"
| Using READ-DELIMITED-LIST won't accomplish this.

  Sigh.  Yes, it will.  (I really wonder why you ask for help when you
  reject the offers you get.  What is _wrong_ with people who ask for help
  in such a manner that only the single, specific question they ask may be
  answered?  If you got stuck, do you think it is because you made all your
  other choices as wisely and informedly as possible?  Of course not!  You
  are stuck _now_ because you made a critical error a _long_ time ago.  The
  ability to make yourself aware of the choices you have made is crucial to
  learn from experience.  Lack of such ability is goddamn annoying to those
  who watch you fumble and stumble through a wilderness of non-solutions
  instead of going straight for the right answer when given a hint.)

| Instead, I must modify the reader.

  You only think you must.  Please listen.

| The Common Lisp specification states that one cannot meaningfully copy
| the reader macro function of #\( because it is hard coded to look for #\)
| to terminate the list.

  Yes, it calls read-delimited-list with #\).  This is _really_ obvious.

| I would like to write a version of the left parenthesis reader macro
| function that can be meaningfully copied, provided one copies the reader
| macro function for #\) as well.

  This is the wrong approach.  How do you know which terminating delimiter
  you want to associate yourself with?  How do you communicate this?  Why
  are you so dead set against communicating it directly to the function
  that reads the delimited list?

| Using these functions in place of the standard reader macro functions
| allows one to meaningfully copy the syntax of #\( to a new list-opening
| character, provided one also copies the syntax of #\) to a corresponding
| new list-closing character.

  If you want to arrive at a solution, rather than your own preconceived
  solution, which you are now trying to force to work, it is no harder than
  to make a function that accepts two arguments, the delimiting characters,
  and sets up the reader for the former macro character to be a function
  that calls read-delimited-list with the latter character as terminator,
  and then copies #\) to the latter so a stray terminator will signal an
  error.  

  I posted code only yesterday that used <> and () for lists.  Do you think
  I mucked around with writing my own read-delimited-list to get this
  effect?  No.  It is simple and straightforward with read-delimited list.

| I want a straight answer to the question: Can EQ test two functions for
| equality in conforming code code?  The specification pages for EQ and
| family don't say.  The above code depends on the answer being "Yes."

  You _want_ a straight answer?  Really?  Are you sure you understand how a
  voluntary forum works?  Why are you so inconsiderate?  How hard can it be
  to treat people who have expressed a desire to _help_ you nicely?

  Geez, the clueless newbies here are getting more arrogant by the minute.

  You can do the work to figure out the "straight answer" yourself.  The
  answer is right there in front of your pertinacious obstinateness.
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.

  70 percent of American adults do not understand the scientific process.