Hi all, I have a question about printf. The following example from the docs works just fine:
'The population of %s is %d\n' printf 'Raleigh';240000 However, when I try to modify it as the following, it doesn't work: 'The population of %s\n' printf 'Raleigh' |length error: exeformat Could someone explain this to me? Tx! > -----Original Message----- > From: programming-boun...@jsoftware.com [mailto:programming- > boun...@jsoftware.com] On Behalf Of Mike Day > Sent: Wednesday, April 21, 2010 12:44 PM > To: Programming forum > Cc: rjkub...@gmail.com > Subject: Re: [Jprogramming] f += 1 > > Richard > > FWIW, Dyalog APL has had something like the C-type > f= assignment for a long time, so perhaps J could also > achieve this if there was sufficient demand. > > So: if f is _any_ dyad, and r x and y nouns, you could do > x f=: y NB. instead of (valid) x =: x f y > > [I'm embedding extra line breaks] > > NB. APL doesn't really distinguish =. and =: > or > > r =: x f=: y NB. instead of x =: x f r =: y > > Interestingly, APL assigns y as the "pass-through" value to r > rather than x f y which one might have expected. > > A simple example: > > A =: 1 2 3 4 5 > > r =: A+=: 10 NB. APL, this is not valid J! > > A > > 11 12 13 14 15 > > r > > 10 > > and another: > vec =: 3 5 1 _1 _2 4 0 _3 2 > > vec#~ =: vec>0 NB. APL, this is not valid J! > > vec > > 3 5 1 4 2 > > Using Raul's modf: > 'v' #~ modf v>0 NB. this is valid J! > > 3 5 1 4 2 > > or !?!! > > 'v' (#~>&0) modf v NB. so is this! > > 3 5 1 4 2 > > When you get to know J, you might prefer something like > > [v =: (#~>&0) 3 5 1 _1 _2 4 0 _3 2 > > 3 5 1 4 2 > > However, I do like Dyalog's modified assignment and use > it often when in APL. > > BTW, modified assignment (with indexed assignment, also not in J!) > allows a nice way of constructing a frequency table: > v =: 1 1 2 1 2 1 2 3 NB. data! > > w =: 0#~#~. v NB. initialise table with 3 zeros > > w[v i.~ ~. v] +=: 1 NB. APL allows bracket indexed assignment > > w > > 4 3 1 NB. v has 4 ones, 3 twos, 1 three > > You can of course do this in J using key, /. > > Mike > > Raul Miller wrote: > > For what it's worth, here is how to define, in J, a > > word which parallels C's modified assignment > > operations: > > > > modf=:1 :0 > > : > > (x)=:(".x)u y > > ) > > > > > > Its use pattern is: > > > > quotedname verb modf noun > > > > Its meaning is: > > name =: name verb noun > > > > where name is the name which was quoted. > > > > For example: > > N=:10 > > 'N' + modf 3 > > 'N' * modf 2 > > > > N will have the value 26 after executing these lines. > > > > If any of this needs explaining, please let me know. > > > > FYI, > > > > > and Richard Kubina wrote: > > f=:3 > (=: >:) f > |syntax error > | (=:>:)f > > Why is this not allowed? > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm