On Tuesday, 5 August 2014 at 22:25:53 UTC, Daniel Gibson wrote:
Am 06.08.2014 00:17, schrieb Idan Arye:
On Tuesday, 5 August 2014 at 21:10:25 UTC, Tofu Ninja wrote:
Can you explain the utility of both of them? I am not big into
functional programming so I am not seeing it.
The purpose of `bindTo` is to emulate the `let` expressions
found in
many functional languages (see
http://en.wikipedia.org/wiki/Let_expression). The idea is to
bind a
value to a name for the limited scope of a single expression.
Note that `bindTo` could be implemented as:
alias bindTo = std.functional.unaryFun;
and I'll probably change the implementation to this if this PR
will be
chosen. The reason I think `bindTo` is needed even if it's
just an alias
to `unaryFun` is that `bindTo` conveys better that the you are
binding a
name to a value, not just overcomplicating the code.
And my impression (in lisp/clojure) was, that let emulates
(named) variables of imperative languages :P
Cheers,
Daniel
That's partially true. While `let` can be used to emulate named
variables, it carries it's own weight - enough for many
functional languages to have both `let` and regular variable
declarations.
Take a look at this Scheme example - http://repl.it/WVU - It
shows both regular variable declaration with `define` and a `let`
expression. `(define x 12)` declares("binds") `x` for the scope
it was written in - the entire scope of `foo`. The `let`
expression creates a new scope and binds `y` in it.
Clojure doesn't have regular variable binding(`def` always uses
the global scope, even if you use it inside a function) so you
have to use `let` to emulate it, though `let` is still used for
it's original purpose - which I think is useful enough for Phobos
to have it.