Comments on the J distribution j602/2008-03-03/16:45: 1. In 8!:x the p<> modifier is supposed to apply to all nonnegative values. But sometimes it isn't applied to a lone 1. This happens in both the Mac and the Windows versions. For example:
('p< >m< ->' & (8!:2)) &.> 12.3;_7 3 _4.5; 1 ; 0 ; 1 ; 0 ; 1p1 +-----+--------------+-+--+-+--+------------+ | 12.3| -7.0 3.0 -4.5|1| 0|1| 0| 3.141592654| +-----+--------------+-+--+-+--+------------+ 2. The writecsv verb in j603/system/packages/files/csv.ijs puts quotes around every data item, even numbers, when only character data should be quoted. The following code, which could probably be improved, seems to quote the data properly: addext =: ] , [ #~ [: -. '.' e. ] }.~ ([: # ]) | PATHSEP_j_ i:~ ] fmtchr =: [: < '"' , '"' ,~ > #~ [: >: '"' = > fmtnum =: 8!:0 & > isnum =: ([: +:/ 2 131072 e. 3!:0&>)"0 NB. ---------------------------------------------------------------------------- NB. fmtcsv - Convert data to CSV format NB. ---------------------------------------------------------------------------- fmtcsv =: 3 : 0 try. ;(<toHOST LF) _1}"(1) 1j1 #!.(<',')"1 fmtchr`fmt...@.isnum y catch. _1 end. ) NB. ---------------------------------------------------------------------------- NB. writecsv - Store data in a CSV file NB. NB. x = Data to be stored NB. y = File pathname (we append '.csv' if no extension is given) NB. ---------------------------------------------------------------------------- writecsv =: 4 : 0 if. _1 -: x =. fmtcsv x do. _1 else. x 1!:2 < '.csv' addext y end. ) 3. It would be very helpful if the online documentation described the inverse of a verb (v^:_1) in the section devoted to that verb, especially for verbs such as # for which the inverse adds significant new capabilities. For example, I have edited my d400.htm file so that the section on dyadic # says: If the arguments have an equal number of items, then x#y copies +/x items from y, with i{x repetitions of item i{y . Otherwise, if one is an atom it is repeated to make the item count of the arguments equal. The complex left argument a j. b copies a items followed by b fills. The fit conjunction provides specified fills, as in #!.f . The inverse of Copy is Expand: b #^:_1 y . The left argument is a boolean vector with ones indicating where to insert corresponding items from the right argument and zeroes indicating where to insert fills. There must be as many ones in x as there are items in y or a length error will result. The fill item may be specified with the fit conjunction. For example: 0 0 0 1 0 1 1 0 1 0 #^:_1 ] 1 3 5 7 0 0 0 1 0 3 5 0 7 0 0 0 1 0 0 1 0 0 1 0 0 #^:_1!.'.' 'abc' ..a..b..c.. 4. The online manual J for C Programmers contains a few errors: declarations.htm: Dyad $ ($hape) and monad $ ($hape Of): the result has the shape 5 (x (i. e. 5) should be the result has the shape 5 loopless_code_j_verbs_have_r.htm: Negative Verb Rank: The sentence is equivalent to +/ "0 i. 2 3 should be The sentence is equivalent to +/ "0 i. 3 Rank Makes Verbs Automatically Extensible: or two vectors should be or four vectors Nested Loops: The first few examples don't show the value of nested ranks: 100 200 300 +"0"0 _ (1 2 3 4) is equivalent to 100 200 300 +"0 _ (1 2 3 4) 100 200 +"0"_ 0 (1 2 3) is equivalent to 100 200 +"_ 0 (1 2 3) loopless_code_iv_irregular_o.htm: A Few J Tricks: if for example x is 2 1 5 the result is 5y2+y+1: should be if for example x is 2 1 5 the result is 5y2+y+2: input_and_output.htm: Format an Array: 8!:n: m=(2{s if n is omitted, should be m=(3{s if n is omitted, Format binary data: 3!:n: This is an integer whose value is 0x31424344 should be This is an integer whose value is 0x31424334 applied_mathematics_in_j.htm: Polynomials: p. : list starts at 2 rather than 1 5. It would be useful to have the following extensions to the grid class: Cell Types: 102: Pushbutton, similar to the Ok button often found on dialogs. For example, for some applications it is useful to have a button on each row. I currently have a GUI where I use the grid row headers as delete buttons for each row, but they don't have the "push in" animation of a normal button when they are clicked. 400-499: Set: any combination of the items in (type - 400) { CELLITEMS . Each item has the value x: 2^((type - 400) { CELLITEMS) i. item, and the value of the cell is the sum of the values of the selected items, as an extended integer (to allow more than 32 items in a set). For example, suppose that a cell has type 475, and 75 { CELLITEMS is the list ---------------------------------------------------- | Monday | Tuesday | Wednesday | Thursday | Friday | ---------------------------------------------------- We then have the item values Monday = 1x, Tuesday = 2x, Wednesday = 4x, Thursday = 8x, and Friday = 16x. If Monday, Wednesday, and Friday are selected, the cell has the value 21x (1x + 4x + 16x). If none of the items is selected, the cell has the value 0. Options: GRIDROWMODE = 2 to highlight entire rows and allow multiple rows to be selected. Clicking on any cell in a row removes any existing marking and marks that entire row. Subsequent shift-clicking on a row highlights the rows from the previously selected row to the shift-clicked row, inclusive. Multiple noncontiguous rows can be selected by ctrl-clicking on them. This would be useful for row operations, for example selecting a range of rows to be deleted from the table. --- Brian ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm