[erlang-questions] Tried this... Thought it interesting... But it didn't work.
zxq9
zxq9@REDACTED
Tue Sep 1 18:43:31 CEST 2015
On 2015年9月1日 火曜日 11:30:31 lloyd@REDACTED wrote:
> So, I ran across this tidbit in the Erlang cybersphere:
>
> List Comprehension without generators
>
> http://blog.equanimity.nl/blog/2015/03/15/erlang-one-weird-trick-goodiebag/
>
> 1> Y = 3.
> 3
> 2> Z = [X || Y > 2].
> * 1: variable 'X' is unbound
>
> OK.So I tried...
>
> -module(test).
>
> -compile(export_all).
>
> test(Y) ->
> [ X || Y > 2].
>
> >3 test:test().
> Error: variable 'X' is unbound
>
> Waah...is someone pulling my leg?
>
> This worked...
>
> 4> Z = [X || X <- [Y >2]].
>
> But it seems rather pointless.
Hi there, Lloyd!
This is a shortcut. It is just using the test in the list comprehension to determine whether a list of one element or an empty list is returned. Both X and Y must already be defined in the scope of the expression:
1> X = 1.
1
2> Y = 2.
2
3> Z = [X || Y > 2].
[]
4> Q = [X || Y > 1].
[1]
Honestly, I don't really think this is the best use of list comprehension syntax. I can easily imagine people being confused at that, or at least requiring a few moments thought to figure out wtf is going on in that line. The fact this confounded you (and the example was unclear in the blog post, imo) is a good reason why you shouldn't do this in your code.
-Craig
More information about the erlang-questions
mailing list