## maxima-discuss — Maxima discussion list

You can subscribe to this list here.

 2014 2015 2016 Jan Feb (232) Mar (323) Apr (383) May (359) Jun (435) Jul (252) Aug (172) Sep (265) Oct (263) Nov (350) Dec (359) Jan (267) Feb (220) Mar (311) Apr (269) May (388) Jun (403) Jul (172) Aug (399) Sep (364) Oct (269) Nov (357) Dec (468) Jan (618) Feb (592) Mar (625) Apr (516) May (375) Jun (155) Jul (312) Aug Sep Oct Nov Dec
S M T W T F S

1
(7)
2
(14)
3
(22)
4
(14)
5
(9)
6
(8)
7
(18)
8
(8)
9
(1)
10
(4)
11
(4)
12
(22)
13
(10)
14
(8)
15
(6)
16
(6)
17
(15)
18
(1)
19
(13)
20
(15)
21
(7)
22
(12)
23
(17)
24
(13)
25
(10)
26
(12)
27
(8)
28
(9)
29
(14)
30
(10)
31
(6)

Showing 17 results of 17

 Re: [Maxima-discuss] Kovacic Algorithm From: Leo Butler - 2014-03-23 22:02:07 ```Nijso Beishuizen writes: > Dear list, please see below. If someone is interested in kovacicODE.mac > (around 34kb), just let me know. > > Best, > Nyso Nyso, May I suggest that you put this code here: http://sourceforge.net/apps/phpbb/maxima/viewforum.php?f=3 Leo > > On Sun, 2014-03-23 at 22:02 +0100, Nijso Beishuizen wrote: >> Dear Neeraj, >> >> >> kovacicODE solves second order linear ODE's with Liouvillian solutions >> In maxima, just do something like this: >> >> load('kovacic.mac'); >> ode:'diff(y,x,2)+a*'diff(y,x)+b*x=c; >> kovacicODE(ode,y,x); >> >> Note that there is a lot of output before the final solution is given >> >> kovacicODE was tested using the Kamke database, which is included in >> maxima in share/contrib/diffequations. >> It solves around 50% or so of the second order linear equations. >> >> >> The Kovacic algorithm is known to take a long time to finish for certain >> ODE's, on my pc sometimes 5 minutes before it finally concludes that no >> Liouvillian solutions exist. >> >> >> It is recommended to define constants appearing in the ODE as constants. >> It might be necessary to restrict the constants further, i.e. say that >> a>0 or even x>0. >> It is sometimes necessary to load absimp to get rid of abs(a) when a>0. >> >> >> >> After kovacicODE has found a solution, it tries to simplify the solution by >> merging constants into the integration constants %k1 and %k2. >> I also try some simplifications and check the number of operators in the >> new result. If the result has less operators, the simplification is >> accepted. >> In some cases, you will still end up with a complex solution, or with a >> solution containing exponential integrals or gamma_incomplete solutions, >> even though the solution can be simplified further. >> >> >> >> >> On Wed, 2014-03-19 at 12:14 +0530, Neeraj Sangwan wrote: >> > I am interested in development version. Could you please send it to me. >> > >> > Thanking you >> > Neeraj >> > >> > On Wed, Mar 19, 2014 at 2:32 AM, nijso beishuizen wrote: >> > > Hello Neeraj, >> > > >> > > I have written an implementation of the Kovacic algorithm. It is based on >> > > the thesis of Carolyn Smith which you can download from the university of >> > > waterloo as a pdf: >> > > >> > > https://cs.uwaterloo.ca/research/tr/1984/CS-84-35.pdf >> > > >> > > I have a development version, if you are interested I can send it to you. >> > > >> > > Best, >> > > Nijso >> > > >> > > >> > >> Date: Sat, 8 Mar 2014 11:23:17 +0530 >> > >> Subject: Kovacic Algorithm >> > >> From: ms09089@... >> > >> To: nijso@... >> > > >> > >> >> > >> Respected Sir >> > >> >> > >> I was searching form some implemntation of kovacic algorithm and I >> > >> fouund your question regarding the same somewhere. Did you find some >> > >> implementation? If yes could you please send some inks or files >> > >> regarding this? >> > >> >> > >> Thanking you >> > >> Neeraj >> > >> 5th year Integrated MS student >> > >> IISER Mohali >> > >> >> >> > > > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/13534_NeoTech -- Leo Butler leo.butler@... SDF Public Access UNIX System - http://sdf.lonestar.org ```
 Re: [Maxima-discuss] Kovacic Algorithm From: Nijso Beishuizen - 2014-03-23 21:16:59 ```Dear list, please see below. If someone is interested in kovacicODE.mac (around 34kb), just let me know. Best, Nyso On Sun, 2014-03-23 at 22:02 +0100, Nijso Beishuizen wrote: > Dear Neeraj, > > > kovacicODE solves second order linear ODE's with Liouvillian solutions > In maxima, just do something like this: > > load('kovacic.mac'); > ode:'diff(y,x,2)+a*'diff(y,x)+b*x=c; > kovacicODE(ode,y,x); > > Note that there is a lot of output before the final solution is given > > kovacicODE was tested using the Kamke database, which is included in > maxima in share/contrib/diffequations. > It solves around 50% or so of the second order linear equations. > > > The Kovacic algorithm is known to take a long time to finish for certain > ODE's, on my pc sometimes 5 minutes before it finally concludes that no > Liouvillian solutions exist. > > > It is recommended to define constants appearing in the ODE as constants. > It might be necessary to restrict the constants further, i.e. say that > a>0 or even x>0. > It is sometimes necessary to load absimp to get rid of abs(a) when a>0. > > > > After kovacicODE has found a solution, it tries to simplify the solution by > merging constants into the integration constants %k1 and %k2. > I also try some simplifications and check the number of operators in the > new result. If the result has less operators, the simplification is > accepted. > In some cases, you will still end up with a complex solution, or with a > solution containing exponential integrals or gamma_incomplete solutions, > even though the solution can be simplified further. > > > > > On Wed, 2014-03-19 at 12:14 +0530, Neeraj Sangwan wrote: > > I am interested in development version. Could you please send it to me. > > > > Thanking you > > Neeraj > > > > On Wed, Mar 19, 2014 at 2:32 AM, nijso beishuizen wrote: > > > Hello Neeraj, > > > > > > I have written an implementation of the Kovacic algorithm. It is based on > > > the thesis of Carolyn Smith which you can download from the university of > > > waterloo as a pdf: > > > > > > https://cs.uwaterloo.ca/research/tr/1984/CS-84-35.pdf > > > > > > I have a development version, if you are interested I can send it to you. > > > > > > Best, > > > Nijso > > > > > > > > >> Date: Sat, 8 Mar 2014 11:23:17 +0530 > > >> Subject: Kovacic Algorithm > > >> From: ms09089@... > > >> To: nijso@... > > > > > >> > > >> Respected Sir > > >> > > >> I was searching form some implemntation of kovacic algorithm and I > > >> fouund your question regarding the same somewhere. Did you find some > > >> implementation? If yes could you please send some inks or files > > >> regarding this? > > >> > > >> Thanking you > > >> Neeraj > > >> 5th year Integrated MS student > > >> IISER Mohali > > > > > ```
 Re: [Maxima-discuss] Maxima-discuss Digest, Vol 2, Issue 40 From: Bill Wood - 2014-03-23 17:10:54 ```On Sun, 2014-03-23 at 15:51 +0000, Leo Butler wrote: . . . > My point in writing the functions co-operatively and tail-recursively is > that the logic is easier to follow. Re-writing a tail-recursive function > as a loop seems easier than vice-versa. Maybe I have just become bitten > by a fashion virus. I and practically every Scheme programmer in the land heartily agree :-). In my experience re-writing a while loop as a tail-recursive function is almost always dead-bang easy. The state variables of the loop become the parameters of the function, the body of the loop becomes the body of the function, and the jump at the bottom of the loop becomes the tail call. Of course, I always try to write simple loops so this may be self-fulfilling prophesy :-). -- Bill Wood ```
 [Maxima-discuss] takewhile in lisp From: Richard Fateman - 2014-03-23 17:04:20 ```(defun \$takewhile5(L p) (let ((c nil)(idx 0) (test nil)) (declare(fixnum idx)(optimize (speed 3)(safety 0))) (cons '(mlist) (nreverse (loop for x in (cdr L) finally (return c) do (incf idx) (setf test (mfuncall p x)) (if (and (not test) c)(return c)) (if test (push (list '(mlist) x idx) c))))))) I think one needs a larger example to test this one. It is maybe 10X or 20X faster than the previous one, depending on if you compile the lisp, and what lisp. So we are talking about 1200 X faster than the original. have fun. ```
 [Maxima-discuss] takewhile ... From: Richard Fateman - 2014-03-23 16:48:28 ```I just tried... takewhile2(makelist(i,i,10000),lambda([x],x>0))\$ takes 18 secs on my computer takewhile4(makelist(i,i,10000),lambda([x],x>0))\$ takes 0.55 sec. or occasionally much less. makelist alone takes 0.12 sec... Short times like this are hard to reproduce. Another fix would be to have a destructive reverse. In lisp, nreverse. You do not need to preserve the accumulated answer backwards. Then the lisp version of cons would be much faster than maxima's which has to preserve the header... Anyway, a lisp version would be faster and maybe shorter. If it matters. Doing tail-recursion removal is probably easier in lisp because the semantics are cleaner than with Maxima. The readability of code, including tail recursion, is in the eye of the beholder. I like it too, but not exclusively. RJF ```
 Re: [Maxima-discuss] DataTypes.texi MathFunctions.texi integral/integer From: Bill Wood - 2014-03-23 16:43:42 ```On Sun, 2014-03-23 at 10:09 -0300, Jorge Barros de Abreu wrote: . . . > > Anyway, I quite like "non-integral" here. Non-integer sounds a bit > > barbaric, but maybe this is just my British provincialism... If we > > really want to avoid using "integral" to mean "something that's an > > integer", maybe a better formulation would be something like: > > > > It is also an 'evflag'. With 'float', both rational numbers that are > > not integers and any bigfloat numbers are converted to floating point. But we have to be careful in mathematical contexts. I can say that the Collatz function, defined in maxima by (%i1) C(n) := if evenp(n) then n/2 else 3*n+1; has an *integer* domain but if I say it has an *integral* domain mathematicians would say I spoke badly or even nonsensically since an integral domain is an algebraic structure (a commutative ring with unity 1 /= 0 with no zero divisors). Note that the rationals, the reals and the complexes all form integral domains. When restricting attention to the integers I would prefer to use "integer" over "integral" even at the expense of linguistic grace. Of course that's just me. > > But there's a reason English has adjectives: that doesn't flow anywhere > > near as nicely as the original! I agree with both sentiments, but still, English does also have complex nouns, and there must be a reason for that as well. -- Bill Wood ```
 Re: [Maxima-discuss] Maxima-discuss Digest, Vol 2, Issue 40 From: Leo Butler - 2014-03-23 15:52:22 ```Pankaj Sejwal writes: > Neither the Maxima interpreter nor compiler optimize tail > recursion, so the bind stack will overflow with long > arguments. Without tail recursion optimization, it's generally not > a good idea to use this style of coding for arguments which could > be very long lists. Yes, the bind stack could be made bigger, but > the main effect of that would simply be that it would take longer > for the very common error of infinite recursion to be reported! > > __________________________ > Based on important point made by Stavros, I collected some statistics > on 3 snippets I have, to do same work, 1) Leo's update code using > %take_accumulate fails with Bind Stackoverflow if entries go beyond > 250. As mentioned by Stavros and rhyming with my earlier experience > with a question on Stackoverflow.com which I posted a few days back. Stavros caution is correct in fact but wrong in spirit, in my opinion. Admittedly, recursive/functional programming in Maxima is not optimal speed-wise, but it is a far superior way to *document* code in code. Btw, the bind stack overflows you see are probably down to gcl's very conservative limit. Sbcl easily handles a list of length 10 000 (and clisp does, too, with compiled functions): (%i4) showtime:true \$ (%i5) takewhile(makelist(i,i,0,10^4),lambda([x],x>10))\$ Evaluation took 5.8080 seconds (5.8240 elapsed) using 106.577 MB. This is on a 5-year old netbook running debian testing. My conclusion is that if the Maxima translator/compiler were better, gcl would be able to recognize the tail recursion and optimize it away, as it does in many other situations. > 2) my Snippet, takes 93 seconds to process 10,000 records and on compiling > takes about 38 seconds. > 3) Another code suggested by a user "slitvinov" processes 10,000 records in 38 > seconds without compile and 40-59 seconds after compile. The best performing > snippet is, > __________________________________________ > takewhile2(lst, pr):= block([c: []], >   reverse(catch(for idx thru length(lst) do block([el: part(lst, idx)], >         if not pr(el) and not emptyp(c) then throw(c) >         else if pr(el) then push([el, idx], c)), >       c)))\$ > __________________________________________ > Usage::takewhile2(makelist(i,i,10000),lambda([x],x>0))\$ > __________________________________________ > Evaluation took 32.4300 seconds (32.4300 elapsed) > With compile::Evaluation took 52.2200 seconds (52.2200 elapsed) > -------------------------------------------------------------------- > > In my opinion Leo's way of coding is good because it gives more atomic > functions to be used later with other functions as well. So, how can one > increase the bind-stack limit to a large extent and does it affect memory or > performance of program ? Haskell supports infinite recursion but we probably > are better off without it, I guess. I think that the best thing to do is to improve Maxima's translator. A more short-term goal would be to look at %take_search and redo it as a while loop; likewise for %take_accumulate. My point in writing the functions co-operatively and tail-recursively is that the logic is easier to follow. Re-writing a tail-recursive function as a loop seems easier than vice-versa. Maybe I have just become bitten by a fashion virus. -- Leo Butler leo.butler@... SDF Public Access UNIX System - http://sdf.lonestar.org ```
 [Maxima-discuss] takewhile code From: Richard Fateman - 2014-03-23 15:01:48 Attachments: Message as HTML ```In the takewhile sweepstakes, not only does that program call length many times, but part(lst,idx) gets expensive as idx increases. by comparison, the following changes show how to go up to 170X faster. The first version is 60-80X faster; 80X if compiled. takewhile3(lst,pr):=block([c:[],idx:0,test], reverse(catch(for x in lst do (idx:idx+1, if not (test:pr(x)) and not emptyp(c) then throw(c), if test then push([x,idx],c)), c)))\$ test is q: makelist(i,i,1,10^4)\$ takewhile3(q,lambda([s],s>0))\$ adding the line modedeclare(idx,fixnum) makes it 121 times faster. Actually, takewhile3(q, lambda([s], is (s>0)))\$ should be slightly faster. and this: takewhile4(lst,pr):=block([c:[],idx:0,test],mode_declare(idx,fixnum), reverse(catch(for x in lst do (idx:idx+1, if not (test:pr(x)) and not emptyp(c) then throw(c), if test then push([x,idx],c)), c)))\$ ss(s):= is (s>0)\$ compile(ss); compile(takewhile4); takewhile4(q,ss)\$ is 170X times faster than the version below. On 3/23/2014 7:07 AM, Barton Willis wrote: > > > > > ------------------------------------------------------------------------ > > takewhile2(lst, pr):= block([c: []], > reverse(catch(for idx thru length(lst) do block([el: part(lst, idx)], > if not pr(el) and not emptyp(c) then throw(c) > else if pr(el) then push([el, idx], c)), > c)))\$ > __________________________________________ > > > For a list with length N, this code calls length on the loop > invariant lst N+1 times. Maybe you could change to something like > for x in lst do ( ....) > > --Barton > > ```
 [Maxima-discuss] make check result match failure From: Nijso Beishuizen - 2014-03-23 14:13:03 ```Dear all, I am testing a piece of code by using my own testsuite.lisp and running 'make check'. I sometimes get a result like this: solution = [y = %k2 ((x - 1) log(x) - 4) + %k1 (x - 1)] This differed from the expected result: [y = %k1 (x - 1) + %k2 (- 4 - log(x) + x log(x))] I'm not sure how to make this result pass the test. Subtract the expected result, simplify and make "0" the expected result? I would expect that 'make check' does that internally, or not? Best, Nyso ```
 Re: [Maxima-discuss] Maxima-discuss Digest, Vol 2, Issue 40 From: Barton Willis - 2014-03-23 14:07:56 Attachments: Message as HTML ``` ________________________________ takewhile2(lst, pr):= block([c: []], reverse(catch(for idx thru length(lst) do block([el: part(lst, idx)], if not pr(el) and not emptyp(c) then throw(c) else if pr(el) then push([el, idx], c)), c)))\$ __________________________________________ For a list with length N, this code calls length on the loop invariant lst N+1 times. Maybe you could change to something like for x in lst do ( ....) --Barton ```
 Re: [Maxima-discuss] DataTypes.texi MathFunctions.texi integral/integer From: Jorge Barros de Abreu - 2014-03-23 13:09:13 ```I am only viewing the "math integral". It is clear, due to all messages sent here, that the context in DataTypes allow a good idea and is OK. This situation of ideas flow is good. Thanks for your time to open the door and put light in the room. On Sun, Mar 23, 2014 at 11:37:00AM +0000, Rupert Swarbrick wrote: > Anyway, I quite like "non-integral" here. Non-integer sounds a bit > barbaric, but maybe this is just my British provincialism... If we > really want to avoid using "integral" to mean "something that's an > integer", maybe a better formulation would be something like: > > It is also an 'evflag'. With 'float', both rational numbers that are > not integers and any bigfloat numbers are converted to floating point. > > But there's a reason English has adjectives: that doesn't flow anywhere > near as nicely as the original! > > > Rupert > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/13534_NeoTech > _______________________________________________ > Maxima-discuss mailing list > Maxima-discuss@... > https://lists.sourceforge.net/lists/listinfo/maxima-discuss -- Data Estelar 2456740,027836 http://sites.google.com/site/ficmatinf Desejo-lhe Paz, Vida Longa e Prosperidade. São Bem Vindas Mensagens no Formato texto UTF-8 com Acentos. ```
 Re: [Maxima-discuss] Maxima-discuss Digest, Vol 2, Issue 40 From: Pankaj Sejwal - 2014-03-23 13:00:33 Attachments: Message as HTML ```> Andrey > wrote: > > > ... > > > > I notice that "%take_accumulate" and "%take_search" look nicely tail > > recursive. Is that of any value other than elegance in maxima code? > > Does the interpreter do Tail Recursion Optimization? Does the execution > > engine for compiled code do TRO? Does it matter with modern high-speed > > big-memory computers? > > > Neither the Maxima interpreter nor compiler optimize tail recursion, so the > bind stack will overflow with long arguments. Without tail recursion > optimization, it's generally not a good idea to use this style of coding > for arguments which could be very long lists. Yes, the bind stack could be > made bigger, but the main effect of that would simply be that it would take > longer for the very common error of infinite recursion to be reported! __________________________ Based on important point made by Stavros, I collected some statistics on 3 snippets I have, to do same work, 1) Leo's update code using %take_accumulate fails with Bind Stackoverflow if entries go beyond 250. As mentioned by Stavros and rhyming with my earlier experience with a question on Stackoverflow.comwhich I posted a few days back. 2) my Snippet, takes 93 seconds to process 10,000 records and on compiling takes about 38 seconds. 3) Another code suggested by a user "slitvinov"; processes 10,000 records in 38 seconds without compile and 40-59 seconds after compile. The best performing snippet is, __________________________________________ takewhile2(lst, pr):= block([c: []], reverse(catch(for idx thru length(lst) do block([el: part(lst, idx)], if not pr(el) and not emptyp(c) then throw(c) else if pr(el) then push([el, idx], c)), c)))\$ __________________________________________ Usage::takewhile2(makelist(i,i,10000),lambda([x],x>0))\$ __________________________________________ Evaluation took 32.4300 seconds (32.4300 elapsed) With compile::Evaluation took 52.2200 seconds (52.2200 elapsed) -------------------------------------------------------------------- In my opinion Leo's way of coding is good because it gives more atomic functions to be used later with other functions as well. So, how can one increase the bind-stack limit to a large extent and does it affect memory or performance of program ? Haskell supports infinite recursion but we probably are better off without it, I guess. Woods, You are correct about difference in `takewhile` in Haskell and this one. The reason I have positions attached is so that one can check if result starts at beginning or not and proceed accordingly by prepending [] by himself. Regards, Pankaj ```
 Re: [Maxima-discuss] customized takewhile From: Barton Willis - 2014-03-23 12:40:40 Attachments: Message as HTML ```The proposed recursive takewhile has trouble with lists of just 1000s of entries: (%i47) takewhile(makelist(i,i,1,10^4),lambda([s],s>0))\$ Maxima encountered a Lisp error: Error in PROGN [or a callee]: Bind stack overflow. A nonrecursive takewhile (possibly same specification as Haskell) might be load(basic)\$ tw(l,pred) := block([acc : []], while l # [] and pred(first(l)) do push(pop(l),acc), reverse(acc))\$ (%i50) tw(makelist(i,i,1,10^4),lambda([s],s>0))\$ Should push and pop be promoted to Maxima's core? A kill(all) removes the definitions of push and pop. When pop is undefined, my tw code loops infinitely :( --Barton ```
 Re: [Maxima-discuss] DataTypes.texi MathFunctions.texi integral/integer From: Rupert Swarbrick - 2014-03-23 11:45:26 Attachments: signature.asc ```Jorge Barros de Abreu writes: > On Sat, Mar 22, 2014 at 10:35:15PM +0000, Leo Butler wrote: >> I think that, in general, it is better to use a slightly longer but >> potentially less ambiguous construction: >> >> Thus, when @var{x} is an integer, >> genfact (x, x, 1) = x! and genfact (x, x/2, 2) = x!!. > > > Seems to me that, due to Maxima manual be (also) > a mathematics manual, it is more suitable. > > ?And in the DataTypes.texi situation?? > > "It is also an @mrefcomma{evflag} @code{float} causes > non-integral rational numbers and bigfloat numbers to be converted to > floating point." Ah, well it doesn't help that there's a grammar mistake in the English :-) (the comma should be a colon, semicolon or full stop) Anyway, I quite like "non-integral" here. Non-integer sounds a bit barbaric, but maybe this is just my British provincialism... If we really want to avoid using "integral" to mean "something that's an integer", maybe a better formulation would be something like: It is also an 'evflag'. With 'float', both rational numbers that are not integers and any bigfloat numbers are converted to floating point. But there's a reason English has adjectives: that doesn't flow anywhere near as nicely as the original! Rupert ```
 Re: [Maxima-discuss] customized takewhile From: Gunter Königsmann - 2014-03-23 07:29:44 ```Even worse: As long as the Maxima version the Windows installer provides (Still 32-Bit) is limited to a single Gigabyte it is already easy to hit memory limits even without recursive programming. At least when using the program for worst-case Manhattan analysis with many variables or for the analysis of real-life data from oscilloscopes. I have to admit that this might not the thing maxima has been designed for, though. But once you get used to the possibilites maxima comes with it is hard to live without the flexibility they provide. ```
 Re: [Maxima-discuss] DataTypes.texi MathFunctions.texi integral/integer From: Bill Wood - 2014-03-23 06:12:41 ```On Sun, 2014-03-23 at 10:52 +0700, Andrey G. Grozin wrote: . . . > I thought "integer" can be also used as an adjective. Don't people say > "an integer variable" while discussing programs? Or "an integer quantity", > or whatever (so, as an adjective, its meaning is the same as "whole" or > "integral"). English has a mechanism known as "complex noun" (also "complex nominal") in which several nouns are cascaded to form a kind of noun phrase. It seems to be a rather common way of creating names for things. Examples include "set theory", "soup pot cover", "spacetime physics", "chaos theory", or my favorite, "compiler compiler". I don't think linguists consider the nouns in front to be adjectives but I'm not sure. It does seem to matter whether the word in front is understood to be a noun or an adjective; for example, the word "concrete" means very different things in the Adjective+Noun phrase "concrete mathematics" and the Noun +Noun phrase "concrete bridge". In the same vein we have "abstract algebra" and "abstract office". -- Bill Wood ```
 Re: [Maxima-discuss] DataTypes.texi MathFunctions.texi integral/integer From: Andrey G. Grozin - 2014-03-23 03:52:27 ```On Sat, 22 Mar 2014, Leo Butler wrote: > Not exactly synonyms. "Integral", which is used as adjective in this > context, means "whole" here; "integer" is a noun that refers to a number > which is whole or integral. I thought "integer" can be also used as an adjective. Don't people say "an integer variable" while discussing programs? Or "an integer quantity", or whatever (so, as an adjective, its meaning is the same as "whole" or "integral"). Andrey ```

Showing 17 results of 17