Hi Jan-Pieter, thank you for your help. This why I am trying to understand how to use the keyboard facilities. The keyboard input ((1:1) 1) treats its input as literals. If you run my function you will understand the behavior.
extd =: 4 : 0 n=. ((1:1) 1) ((".@,&'x' n)) A. i. x ) Ak On Mon., Aug. 14, 2023, 15:28 Jan-Pieter Jacobs, <janpieter.jac...@gmail.com> wrote: > Let me try to explain it : > > The moment J parses a number that iss not followed by an x, it will never > be > an extended integer. This is irrespective of whether the number is parsed > on the command line (J's term), via ". from a string, or from a script. > Loosely speaking, whenever you want a typed-in number to be extended, you > have to explicitly tell J it is one, by following the number with an x. > This is irrespective of the function that operates later on this number > (like the ones you listed). > Yes. This is why I tr > If a number *is* already extended (and stored in a variable, or passed from > the function that created it to the next), operations performed on it will > keep it extended. A. appears to be one of only a few verbs that creates an > extended integer when not fed one (the only other one I can think of is > x:). > > Another thing that could be of help is the linear representation (5!:5), > which returns a string which, when parsed, returns the exact value of the > variable passed as it's argument. A short recording of my session: > > r=:A. p=:?~ 30 NB. a permutation number and vector > datatype r NB. returned datatype is: > extended > r NB. simple display representation > 162474627391890403202250095642096 > 5!:5 <'r' NB. linear representation that can be used to get the exact > value of the variable r, which includes indeed an x > 162474627391890403202250095642096x > datatype 162474627391890403202250095642096 NB. copied and pasted in the > J term, results in a float, loosing precision because the number is too > large. > floating > r-:!.0]162474627391890403202250095642096 NB. indeed the number is not > the same as r > 0 > datatype ".'162474627391890403202250095642096' NB. the same when parsed > using ". > floating > > datatype ". 5!:5<'r' NB. do linear representation does maintain > precision. > extended > > r=!. 0 ". 5!:5<'r' NB. indeed the same number. > 1 > > Long story short: if you want precise numbers, append an x or store an > already precise number in a variable. Don't rely on copy-pasting J's > output, because it is not meant for being interpretable by J like it is in > some other languages. Extended numbers aren't the only instance: arrays > > rank 1 cannot be parsed directly in their display form either. The same for > strings (litterals in J's parlance), as the ticks (') are omitted for > display. > > I hope this helps. > > Jan-Pieter > > On Mon, 14 Aug 2023, 22:19 Ak O, <akin...@gmail.com> wrote: > > > Thank you for this idea but it does not cover this case. Your input is > not > > long enough. > > t=:{{":y}} > > t 180548043269214561950911457875657 > > 1.80548e32 > > > > The object is to achieve 180548043269214561950911457875657x > > in a defined function, so that the input > 180548043269214561950911457875657 > > is treated as 180548043269214561950911457875657x. > > > > > > If you run each function that I gave below with the inputs I have given > you > > will see what I mean. > > > > This where the numbers come from. > > ] permuted_vector. =: ?.~30 > > 20 12 4 29 7 17 22 11 2 27 28 23 6 21 9 3 24 10 26 13 15 1 18 8 25 19 0 5 > > 16 14 > > > > ] A. permuted_vector > > 180548043269214561950911457875657 > > > > > > > > Now we need to go back. > > > > ] (A. permuted_vector) A. i. 30 > > 20 12 4 29 7 17 22 11 2 27 28 23 6 21 9 3 24 10 26 13 15 1 18 8 25 19 0 5 > > 16 14 > > > > (A. permuted_vector) is extended by output construction of (A.). > > So it feeds naturally to the dyadic (A.) operator. This always produces > the > > same permuted_vector. > > > > The challenge is feeding an extended input to the dyad. > > After a length of 19 digits, the type degrades to a float. > > > > > > So please try your own permuted_vector of length minimum 30 with these > > functions below. Their behavior mightshow where my ideas are misplaced. > > > > > > Function 1 > > > > Step 1. Run > > > > extd =: 4 : 0 > > n=. ((1!:1) 1 > > ((".@,&'x' n)) A. i. x > > ) > > > > Step 2. Run > > 30 extd 180548043269214561950911457875657 > > > > > > Step 3. Input and enter. > > 180548043269214561950911457875657 > > > > Complete. > > > > > > > > Function 2 > > > > Step 1. Run > > > > extdquotes =: 4 : 0 > > ((".@,&'x' n)) A. i. x > > ) > > > > Step 2. Run. > > 30 extdquotes '180548043269214561950911457875657' > > > > > > Complete. > > > > > > I might not be explaining as clearly as possible, I appreciate your > > patience. > > > > > > > > Ak. > > > > > > > > > > > > On Mon., Aug. 14, 2023, 12:34 'Skip Cave' via Programming, < > > programm...@jsoftware.com> wrote: > > > > > t=.{{":y}} > > > > > > t 12345678987654321 > > > > > > 12345678987654321 > > > > > > > > > datatype t 12345678987654321 > > > > > > literal > > > > > > > > > Skip Cave > > > Cave Consulting LLC > > > > > > > > > On Mon, Aug 14, 2023 at 1:29 PM Gilles Kirouac <g1...@myriade.ca> > wrote: > > > > > > > >>> What expression allows a function to recieve an argument 'y' as > a > > > > literal > > > > >>> without using quotes? > > > > > > > > None. > > > > > > > > BTW, do not rely on the output of ": (default format) to determine > the > > > > type, because it uses a default format with a default precision. Use > > > > datatype instead > > > > > > > > datatype 180548043269214561950911457875657 > > > > floating > > > > datatype 18054843269214561950911457875657x > > > > extended > > > > 34j0 ": 1805480403269214561950911457875657 > > > > 18054804326921457349416459226316 NB. loss of precision after 15 > > digits > > > > 34j0 ": 180548043269214561950911457875657x > > > > 180548043269214561950911457875657 NB. no loss of precision > > > > > > > > > > > > > > > > ~ Gilles > > > > > > > > Le 2023-08-14 à 14:00, Ak O a écrit : > > > > > Unfortunately ": does not work in this case. > > > > > The length of the input causes the input to be treated as a float. > > The > > > > > result is: > > > > > > > > > > ": 180548043269214561950911457875657 > > > > > 1.80548e32 > > > > > > > > > > > > > > > > > > > > On Mon., Aug. 14, 2023, 11:16 'Skip Cave' via Programming, < > > > > > programm...@jsoftware.com> wrote: > > > > > > > > > >> ":y converts an integer in y into a literal. > > > > >> > > > > >> Skip Cave > > > > >> Cave Consulting LLC > > > > >> > > > > >> > > > > >> On Mon, Aug 14, 2023 at 11:58 AM Ak O <akin...@gmail.com> wrote: > > > > >> > > > > >>> What expression allows a function to recieve an argument 'y' as a > > > > literal > > > > >>> without using quotes? > > > > >>> > > > > >>> Below are two deficient functions. > > > > >>> The size of the vector is given by 'x'. The permutation > > > > >>> index is meant to be given by 'y'. > > > > >>> > > > > >>> My intention is treat 'y' as a literal, without needing to use > > quotes > > > > on > > > > >>> the input. > > > > >>> > > > > >>> This first function works by escaping to the keyboard for input > > > > >>> I would like rather for the function to receive the input from > the > > > raw > > > > >>> argument and not have to escape to the keyboard. > > > > >>> > > > > >>> Desired Input > > > > >>> 30 extd 180548043269214561950911457875657 > > > > >>> Rather than > > > > >>> 30 extd '180548043269214561950911457875657' > > > > >>> > > > > >>> > > > > >>> This function is deficient by its operating sequence. > > > > >>> It escapes to keyboard, which preservs the literal type. > > > > >>> > > > > >>> extd =: 4 : 0 > > > > >>> n=. ((1!:1) 1 > > > > >>> ((".@,&'x' n)) A. i. x > > > > >>> ) > > > > >>> > > > > >>> 30 extd 180548043269214561950911457875657 > > > > >>> > > > > >>> Keyboard input (if this approach makes sense, can the keyboard > > input > > > > be > > > > >>> simulated by using y as the feed?) > > > > >>> 180548043269214561950911457875657 > > > > >>> > > > > >>> Result > > > > >>> 20 12 4 29 7 17 22 11 2 27 28 23 6 21 9 3 24 10 26 13 15 1 18 8 > 25 > > 19 > > > > 0 5 > > > > >>> 16 14 > > > > >>> > > > > >>> > > > > >>> > > > > >>> Alternative deficient function by the input form. > > > > >>> Yields the correct result but uses quotes in the input. > > > > >>> > > > > >>> extdquotes =: 4 : 0 > > > > >>> ((".@,&'x' n)) A. i. x > > > > >>> ) > > > > >>> > > > > >>> 30 extdquotes '180548043269214561950911457875657' > > > > >>> > > > > >>> Result > > > > >>> 20 12 4 29 7 17 22 11 2 27 28 23 6 21 9 3 24 10 26 13 15 1 18 8 > 25 > > 19 > > > > 0 5 > > > > > > > > >>> > > > > > >>> 16 14 > > > > >>> > > > > >>> I am looking for the function that uses the input for extd that > > > > delivers > > > > >>> the result of extdquotes > > > > >>> > > > > >>> > > > > >>> Thank you for your help > > > > >>> Ak > > > > >>> > > > > ... > > > > > ---------------------------------------------------------------------- > > > > For information about J forums see > http://www.jsoftware.com/forums.htm > > > > > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm