On Sun, 31 Jan 2010 20:22:36 -0800, Paul Rubin wrote: > Terry Reedy <tjre...@udel.edu> writes: >> Three of you gave essentially identical answers, but I still do not see >> how given something like >> >> def f(): return 1 >> >> I differentiate between 'function object at address xxx' and 'int 1' >> objects. > > In the languages they are talking about, there is no such thing as a > function with no args. A function is closer to a mathematical function, > i.e. a mapping from one type to another, so every function has an arg.
Suppose I have a function that queries a website http://guessmyname.com for a list of popular names and returns the most popular name on the list. Obviously this name will change from time to time, so I can't just get it once and treat the result as a constant. In a non-functional language, I'd write it something like this: def get_popular_name(): URL = 'http://guessmyname.com' data = fetch(URL) names = parse(data) name = choose(names, 1) return name name = get_popular_name() # call the function with no argument f = decorate(get_popular_name) # treat the function as a 1st class object How would Haskell coders write it? Something like this? def get_popular_name(url): data = fetch url names = parse data name = choose name 1 return name name = get_popular_name 'http://guessmyname.com' # call the function f = decorate get_popular_name # treat the function as a 1st class object But now you're needlessly having the caller, rather than the function, remember an implementation detail of the get_popular_name function. Since the argument couldn't be anything different, I'd immediately think of applying partial: get_popular_name = partial get_popular_name 'http://guessmyname.com' but now how do I call the new function? Is this where you say "Monads" and everyone's eyes glaze over? -- Steven -- http://mail.python.org/mailman/listinfo/python-list