cancel
Showing results for 
Search instead for 
Did you mean: 

how to create temp variable inside $[]

chan_chenyanj
New Contributor II

if i use $[] for if how can i add temp variable there? my understanding is it is either condition or the return value. so how can i put the below logic into this? suppose i have only input x and the if else logic below.

$[x=`a;5; ?]

 

if x = 'a' return 5

if x='b'

       y = x*x +5

      if( y > 6 ) return 6 

      if(y>9) return 10

 

1 ACCEPTED SOLUTION

davidcrossey
Moderator Moderator
Moderator

You can do something like the following:

 

q)f:{[x] $[x~`a;5;x~`b;[y:6*6;$[y<6;6;y>9;10;y]];x]}
q)f
{[x] $[x~`a;5;x~`b;[y:6*6;$[y<6;6;y>9;10;y]];x]}
q)f `a
5
q)f `b
10

I would use a function (as above) or a lambda (anonymous function), that way your temp variable will only remain for the scope of the function i.e. in the example above, does not exist in my global namespace after execution. You can read more about conditional scope here

You can see if x is b in the above we have square brackets [ ] which defines a contained block of code to run if the statement is true. See more here

Please find more on the extended if-else / switch statement here 

View solution in original post

2 REPLIES 2

davidcrossey
Moderator Moderator
Moderator

You can do something like the following:

 

q)f:{[x] $[x~`a;5;x~`b;[y:6*6;$[y<6;6;y>9;10;y]];x]}
q)f
{[x] $[x~`a;5;x~`b;[y:6*6;$[y<6;6;y>9;10;y]];x]}
q)f `a
5
q)f `b
10

I would use a function (as above) or a lambda (anonymous function), that way your temp variable will only remain for the scope of the function i.e. in the example above, does not exist in my global namespace after execution. You can read more about conditional scope here

You can see if x is b in the above we have square brackets [ ] which defines a contained block of code to run if the statement is true. See more here

Please find more on the extended if-else / switch statement here 

chan_chenyanj
New Contributor II

thanks a lot!