Re: Missing function for locating string fragment?

2014-09-15 Thread Jon Kleiser
Hi Alex,

On 12. Sep, 2014, at 16:06, Alexander Burger a...@software-lab.de wrote:

 It is not a good idea to build a list only to count its length. Better
 count in a loop directly, e.g.:
 
   (de sindex (Frag Src)
  (for ((I . L) (chop Src) L (cdr L))
 (T (pre? Frag L) I) ) )

For this 'sindex' I think it would be good to first test if Frag is NIL, since 
with your version above (sindex NIL foo) would give 1. Therefor I would do 
this:

(de sindex (Frag Src)
  (if Frag
(for ((I . L) (chop Src) L (cdr L))
  (T (pre? Frag L) I) ) ) )

/Jon--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Missing function for locating string fragment?

2014-09-15 Thread Alexander Burger
Hi Jon,

 For this 'sindex' I think it would be good to first test if Frag is
 NIL, since with your version above (sindex NIL foo) would give 1.

The 1 is (arguably) correct, because an empty string is a substring of
*every* string.

   : (pre? NIL bla)
   - bla

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Missing function for locating string fragment?

2014-09-12 Thread Jon Kleiser
Hi,

The other day I noticed that I hadn't seen a PicoLisp function for locating a 
string fragment within a longer string. Is there one that I just have failed to 
notice? It is quite common for programming languages to have an index 
function that does this. PicoLisp has an 'index' function, but that one cannot 
be used like this: (index Li PicoLisp)

One way to make up the function I'm missing, could be like this:

(de sindex (Frag Src)
   (if (match (make (link '@A) (mapcar link (chop Frag)) (link '@B)) (chop Src))
  (length @A) ) )

Then (sindex Li PicoLisp) would give 4. Maybe it would be preferable for it 
to give 5.
As it is quite common for PicoLisp functions to have different behaviours 
depending on the type of input, the behaviour of my 'sindex' could also be made 
a part of the standard PicoLisp 'index' function.

/Jon--
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Missing function for locating string fragment?

2014-09-12 Thread Alexander Burger
Hi Jon,

 The other day I noticed that I hadn't seen a PicoLisp function for
 locating a string fragment within a longer string. Is there one that I
 just have failed to notice?

Yes, that's right. In fact, the only functions which I would regard as
string manipulations (i.e. operate directly on a symbol name) are

   pre?
   sub?
   uppc
   lowc

This is on purpose. In general, arbitrary manipulations of string data
are supposed to be done with the (quite rich) set of List functions
(after 'chop'ing the symbol name, for example). This gives much more
flexibility and avoids duplicate functionalities.


 It is quite common for programming languages
 to have an index function that does this. PicoLisp has an 'index'
 function, but that one cannot be used like this: (index Li PicoLisp)

The above 'sub?' is close to it, but doesn't return a position.


 One way to make up the function I'm missing, could be like this:
 
 (de sindex (Frag Src)
(if (match (make (link '@A) (mapcar link (chop Frag)) (link '@B)) (chop 
 Src))
   (length @A) ) )

It is not a good idea to build a list only to count its length. Better
count in a loop directly, e.g.:

   (de sindex (Frag Src)
  (for ((I . L) (chop Src) L (cdr L))
 (T (pre? Frag L) I) ) )


 Then (sindex Li PicoLisp) would give 4. Maybe it would be
 preferable for it to give 5.

Yes, the above returns 5. This is more in sync with the PicoLisp
convention of counting elements from 1.


 As it is quite common for PicoLisp functions to have different
 behaviours depending on the type of input, the behaviour of my 'sindex'
 could also be made a part of the standard PicoLisp 'index' function.

I must say that rings an alarm in my head when index numbers are used to
operate on lists (or symbol names). Usually there is a better way. What
do you need this function for?

♪♫ Alex
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe


Re: Missing function for locating string fragment?

2014-09-12 Thread Jon Kleiser
Hi Alex,

Thanks for the reply, and for suggesting a better solution than the one I made 
up. I have no immediate use for such a 'sindex' function, and maybe this is not 
a function that one would need very often when doing things the PicoLisp way.

Have a nice weekend!

/Jon

On 12. sep. 2014, at 16:06, Alexander Burger a...@software-lab.de wrote:

 Hi Jon,
 
 The other day I noticed that I hadn't seen a PicoLisp function for
 locating a string fragment within a longer string. Is there one that I
 just have failed to notice?
 
 Yes, that's right. In fact, the only functions which I would regard as
 string manipulations (i.e. operate directly on a symbol name) are
 
   pre?
   sub?
   uppc
   lowc
 
 This is on purpose. In general, arbitrary manipulations of string data
 are supposed to be done with the (quite rich) set of List functions
 (after 'chop'ing the symbol name, for example). This gives much more
 flexibility and avoids duplicate functionalities.
 
 
 It is quite common for programming languages
 to have an index function that does this. PicoLisp has an 'index'
 function, but that one cannot be used like this: (index Li PicoLisp)
 
 The above 'sub?' is close to it, but doesn't return a position.
 
 
 One way to make up the function I'm missing, could be like this:
 
 (de sindex (Frag Src)
   (if (match (make (link '@A) (mapcar link (chop Frag)) (link '@B)) (chop 
 Src))
  (length @A) ) )
 
 It is not a good idea to build a list only to count its length. Better
 count in a loop directly, e.g.:
 
   (de sindex (Frag Src)
  (for ((I . L) (chop Src) L (cdr L))
 (T (pre? Frag L) I) ) )
 
 
 Then (sindex Li PicoLisp) would give 4. Maybe it would be
 preferable for it to give 5.
 
 Yes, the above returns 5. This is more in sync with the PicoLisp
 convention of counting elements from 1.
 
 
 As it is quite common for PicoLisp functions to have different
 behaviours depending on the type of input, the behaviour of my 'sindex'
 could also be made a part of the standard PicoLisp 'index' function.
 
 I must say that rings an alarm in my head when index numbers are used to
 operate on lists (or symbol names). Usually there is a better way. What
 do you need this function for?
 
 ♪♫ Alex

PԔ � j)mX�����zV�u�.n7�