Is Python a functional programming language?
Nobody
nobody at nowhere.com
Fri May 14 15:08:52 EDT 2010
On Tue, 11 May 2010 18:31:03 -0700, Paul Rubin wrote:
>>> is called an "equation" rather than an "assignment". It declares "x is
>>> equal to 3", rather than directing x to be set to 3. If someplace else
>>> in the program you say "x = 4", that is an error, normally caught by
>>> the compiler, since x cannot be equal to both 3 and 4.
>>
>> In both ML and Haskell, bindings are explicitly scoped, i.e.
>> let x = 3 in ... (Haskell)
>
> I'm not talking about nested bindings. I'm talking about two different
> bindings of the same symbol in the same scope:
>
> $ cat meow.hs
> x = 3
> x = 4
> $ ghc meow.hs
>
> meow.hs:2:0:
> Multiple declarations of `Main.x'
> Declared at: meow.hs:1:0
> meow.hs:2:0
It may be worth noting the interactive behaviour:
$ ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/ :? for help
Loading package base ... linking ... done.
Prelude> let x = 7
Prelude> let f y = x + y
Prelude> f 3
10
Prelude> let x = 5
Prelude> f 3
10
The main point is that variables aren't mutable state.
An important secondary point is that, unlike Python, free (global)
variables in a function body are substituted when the function is defined,
not when it's called.
More information about the Python-list
mailing list