digitalmars.D - [Discussion] Endless lists
- Sjoerd van Leent (17/17) Nov 08 2004 Hello all,
- Sean Kelly (15/29) Nov 08 2004 So am I right in assuming that you mean an endless list would be declare...
- Sjoerd van Leent (16/63) Nov 09 2004 I think this would me the most usable manner to define an endless list.
- Sean Kelly (10/20) Nov 09 2004 It's too bad D doesn't have reference types or you could do this:
- Norbert Nemec (10/12) Nov 08 2004 As far as I know, endless lists in functional languages actually don't h...
- Sjoerd van Leent (7/25) Nov 09 2004 My definition of length of the lists here is meant to be physical.
Hello all, In some functional languages it is possible to have endless lists. Such lists are really with a length, but can be expanded when necessary. This means that it is possible for example to define a function like: int getCalculatedNumber(int index) { int[..] endless; if (endless[index] == 0) { endless[index] = index ^ 2; } return endless[index]; } This is mainly handy for dynamic programming etc. I don't mean to say that it needs to be a standard language feature (maybe it is better off as a library), I just want people to discuss the feature. Regards, Sjoerd van Leent
Nov 08 2004
In article <cmoi0d$r5i$1 digitaldaemon.com>, Sjoerd van Leent says...In some functional languages it is possible to have endless lists. Such lists are really with a length, but can be expanded when necessary. This means that it is possible for example to define a function like: int getCalculatedNumber(int index) { int[..] endless; if (endless[index] == 0) { endless[index] = index ^ 2; } return endless[index]; } This is mainly handy for dynamic programming etc. I don't mean to say that it needs to be a standard language feature (maybe it is better off as a library), I just want people to discuss the feature.So am I right in assuming that you mean an endless list would be declared as, in this case: int[..] endless; where the '..' indicates that the list is endless. And that any index operation on such a list would succeed, perhaps by invisibly resizing the list? Since D already supports resizable arrays, I don't see a huge advantage to this--it would be easy enough to add some code to do this manually: if( endless.length < index ) endless.length = index; An alternative would be to use a dictionary as a sparse list: int[int] endless; This seems like it would make more sense as it eliminates the chance of a OutOfMemoryError with code like this: int x = getCalculatedNumber( 99999999999 ); Sean
Nov 08 2004
Sean Kelly wrote:In article <cmoi0d$r5i$1 digitaldaemon.com>, Sjoerd van Leent says...I think this would me the most usable manner to define an endless list. Wrapping it in a templated class would make it complete.In some functional languages it is possible to have endless lists. Such lists are really with a length, but can be expanded when necessary. This means that it is possible for example to define a function like: int getCalculatedNumber(int index) { int[..] endless; if (endless[index] == 0) { endless[index] = index ^ 2; } return endless[index]; } This is mainly handy for dynamic programming etc. I don't mean to say that it needs to be a standard language feature (maybe it is better off as a library), I just want people to discuss the feature.So am I right in assuming that you mean an endless list would be declared as, in this case: int[..] endless; where the '..' indicates that the list is endless. And that any index operation on such a list would succeed, perhaps by invisibly resizing the list? Since D already supports resizable arrays, I don't see a huge advantage to this--it would be easy enough to add some code to do this manually: if( endless.length < index ) endless.length = index;An alternative would be to use a dictionary as a sparse list: int[int] endless;Problem here is that the list does not actually resize. It only gets one new item each iteration an item is used which is inavailable. Nevertheless, it may be usable in some situations as well.This seems like it would make more sense as it eliminates the chance of a OutOfMemoryError with code like this: int x = getCalculatedNumber( 99999999999 ); SeanI am interested in this for creating a dynamic lookup table that enlarges itself when a new item needs to be added. I am looking for ways to perform a callback to a function that contains the logic to create the new item(s). For example, if I would define a list that can have unlimited items, and a hit occurs which is at that moment out of bounds, the list would automatically call a delegated function that calculates the outcome that needs to be inserted in the location. Regards, Sjoerd
Nov 09 2004
Sjoerd van Leent wrote:I am interested in this for creating a dynamic lookup table that enlarges itself when a new item needs to be added. I am looking for ways to perform a callback to a function that contains the logic to create the new item(s). For example, if I would define a list that can have unlimited items, and a hit occurs which is at that moment out of bounds, the list would automatically call a delegated function that calculates the outcome that needs to be inserted in the location.It's too bad D doesn't have reference types or you could do this: alias int set( int[] a, int x ) { if( a.length < x ) a.resize( x + 1 ); return a[x]; } int[] endless; endless.set( 9999 ) = 10; I suppose you could use pointers, but that would make it less seamless. Sean
Nov 09 2004
Sjoerd van Leent wrote:In some functional languages it is possible to have endless lists. Such lists are really with a length, but can be expanded when necessary.As far as I know, endless lists in functional languages actually don't have any length. Since (pure) functional languages don't know any assignment, changing the lenght of a lists wouldn't be possible anyway. Infinite lists as I remember them actually are what the name says: infinite collections of values. Of course, these values cannot be stored but are calculated on the fly. Actually, in D, the equivalent to this would be a class overriding opIndex. To the outside, it looks like a list, internally, it is calculated on the fly.
Nov 08 2004
Norbert Nemec wrote:Sjoerd van Leent wrote:My definition of length of the lists here is meant to be physical. Hereby I mean that such lists are restrained by the physical limitations of a computer (memory bounds). I was indeed having the idea to create a class that does this. Regards, SjoerdIn some functional languages it is possible to have endless lists. Such lists are really with a length, but can be expanded when necessary.As far as I know, endless lists in functional languages actually don't have any length. Since (pure) functional languages don't know any assignment, changing the lenght of a lists wouldn't be possible anyway. Infinite lists as I remember them actually are what the name says: infinite collections of values. Of course, these values cannot be stored but are calculated on the fly. Actually, in D, the equivalent to this would be a class overriding opIndex. To the outside, it looks like a list, internally, it is calculated on the fly.
Nov 09 2004