I'm sure this is obvious but I'm a little unclear about it. Suppose I wanted to make a function do something like f(x) = 3x+1
. Knowing the rule for forks, I expect to see something like this: [: 1&+ 3&*
which is not that beautiful to me, but I guess is nicer looking that (1&+) @: (3&*)
with the extra parentheses. Instead, if I query with 13:
I get this:
13 : '1+3*y'
1 + 3 * ]
Way more beautiful, but I don't understand how it is possible. ]
is the identity function, *
and +
are doing their usual thing, but how are the literals working here? Why is J not attempting to "call" 1 and 3 with arguments as if they are functions? I notice that this continues to do the right thing if I replace any of the constants with [
or ]
, so I think it is interpreting this as a train of some kind, but I'm not sure.
When J was first described, forks were all verbs (V V V)
, but then it was decided to let nouns be in the left tine position and return their face value. So (N V V)
is seen as a fork as well. In some older code you can see the left tine of the fork show up as a 'verbified' noun such as 1:
or 'a'"_
which act as verbs that return their face value when given any argument.
(N V V)
configuration is described in the dictionary as "The train N g h
(a noun followed by two verbs) is equivalent to N"_ g h
." http://www.jsoftware.com/help/dictionary/dictf.htm