On 2003-11-21T13:22:18-0500, Joe Marshall wrote: > Ken Shan <email@example.com> writes: > > > I'm sorry but I'm losing your point here. You have explained what it > > means to parameterize a type ("list of strings" vs "list of integers"), > > but not what it means to parameterize a function ("take the length of a > > string list" vs "take the length of an integer list"). The reason the > > latter is crucial is because in many statically typed languages these > > two functions can be the same. > > I was proposing this as a counterexample of your earlier statement: > > > The intuition that I am trying to get at is, -some- part of your program > > needs to assume -something- about the interface supported by your list > > elements in order for the program overall to observably operate on the > > list and its elements. > > There is some value to having a list where *no* part of your program > assumes *anything* about the interface. I don't see any observable value in such a program above and beyond the observable value of a program that simply doesn't bother storing any of the list elements. In other words, any program that makes no assumptions about the list element's supported interfaces can be turned into or treated as a program that just forgets about the elements altogether; the two programs have the same observable behavior. For instance, the output of the list-reverse function is not observable unless you make an assumption as to how to observe the returned list. If we promise ourselves that we will never make any such assumption, then we may as well replace the list with the natural number that is its length, and have list-reverse just return the same number as it is given. No one (who adheres to that promise) will be the wiser. Ken -- Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig Pray for Turkey, Northern Ireland, and Britain, please.
Description: Digital signature