Bill Allombert on Thu, 02 Apr 2009 19:55:31 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: character input to functions |
On Thu, Apr 02, 2009 at 12:01:49PM -0500, cino hilliard wrote: > > Exactly what I said. I want to input without having to do the 4 extra keystrokes > for quotes for each number. Four ? Two should suffice I think. > Suppose in the dessert I stumble upon an old and fragial scroll of thousands > of numbers in base 32. I have a base(b1,b2,n) that converts n base r1 to r2. > I want to determine if the base 32 numbers are prime or not. Now depending, > on the starting number, This works. > > g(n) = isprime(eval(base(32,10,n))). > > (10:50:38) gp > g(12345ab) > *** too many parameters in user-defined function call: g(12345ab) > ^--- > > So we put n in quotes. > > (10:52:33) gp > g("12345ab") > %30 = 0 > > Yep. That works. I guess I could pay my assistent to simply type in the quotes > so we would not get the error. Or I could make him think on each number: > "To quote or not to quote." This is a terible idea(Sorry Willie). OK, so I will give you a tip for free ( so you will save money!): make your assistant to write all the numbers in a text file 'numbers.txt' without quotes and one by lines, then add the quotes with sed -e 's/.*/"&"/' and read the file under GP with readvec. > Because thinking will > get errors on input. The input should be rote for maximum accuracy. Then the > creative juices abound. Why can't Pari accept all inputs without quotes? Because this would conflict with existing syntax: 1e3 ? g(n)=n ? g(1e3) %9 = 1000.0000000000000000000000000000000000 ?g(1+1) %10 = 2 etc. You do not want 1000.000 to appears in your sequence! Maybe what you want is: sread()=extern("read a; echo \\\"$a\\\"") g(n)= { v=vector(n); for(i=1,n, s=sread(); if(s=="",return(vecextract(v,1<<(i-1)-1))); v[i]=s); v } Now do g(100) and start typing your numbers. Enter an empty line for stopping. Cheers, Bill.