Post Reply 
newRPL - build 1255 released! [updated to 1299]
05-20-2019, 09:26 PM (This post was last modified: 05-20-2019 09:53 PM by Gilles.)
Post: #433
RE: newRPL - build 1089 released! [update:build 1158]
PM sended.

I started to adapt a subset of David Mutter's ListExt library and GoferList to newRPL. It's very fast and efficient. On the other hand I noticed that the structure DIR ... END is not supported in newRPL. Claudio, will it be in the future? It would give more readable sources than having to do "STO" for each program.

Just to illustrate :

Code:
@==============================================================================
@  List Extension + Gofer List adaptation v0.001, Mai 2019, GC
@------------------------------------------------------------------------------
DIR
@============================================================================== 
@ LSeq – List Sequence
@ Description : Génére une liste de n entiers
@
@    Lev.1        Lev.1
@------------------------------------------------------------------------------
@    n    →    {1,2,3,…,n}
@------------------------------------------------------------------------------ 
 LSeq
  « → a  « 1 a FOR 'n' n NEXT a →LIST » »

@============================================================================== 
@ LSeqr – List Sequence Range
@ Description : Génére une liste de n entiers entre 2 valeurs
@
@    Level 1        Level 2        Level 1
@------------------------------------------------------------------------------
@    a        b    →    {a, a+1, a+2, …, b}
@------------------------------------------------------------------------------
 LSeqr   
  « → a b  « a b FOR 'n' n NEXT b a - 1 + →LIST » »

@============================================================================== 
@ LLast – List Last element
@ Description : Renvoie le dernier élément d'une liste
@
@    Lev.1            Lev.1
@------------------------------------------------------------------------------
@    {e1, e2, ...en}    →    en
@------------------------------------------------------------------------------
 LLast
 « DUP SIZE GET »

@============================================================================== 
@ LASeq – List Artihmetic Sequence
@ Description : Renvoie une liste de n3 éléments commençant par n1 
@
@    Lev.1    Lev.2    Lev.3        Lev.1
@------------------------------------------------------------------------------
@    n1    n2    n3    →    {n1, n1+n2,…, n1+n2*(n3-1)}
@------------------------------------------------------------------------------
@ Exemple :     1 2 5 LASeq → { 1 3 5 7 9 }
@        0 0.25 11 LASeq →  { 0. .25 .5 .75 1. 1.25 1.5 1.75 2. 2.25 2.5 }
@        1 1 0 LASeq -> { }
@------------------------------------------------------------------------------
 LASeq
  « → dép diff nbr 
   « 
    CASE 
     nbr 0 == THEN {} END
     nbr 1 == THEN dép 1 →LIST END
     dép 
     2 nbr START DUP diff + NEXT
     nbr →LIST
    END
   » 
  »

@============================================================================== 
@ LPop – Reste et premier élément de la liste
@ Description : Renvoie le reste et le premier élément d'une liste. 
@ Toutes les sous-listes doivent avoir la même dimension.
@
@    Lev.1                Lev.1            Lev.2
@------------------------------------------------------------------------------
@    {e1, e2, e3, …, en}    →    {e2,e3, …, en}        e1
@------------------------------------------------------------------------------
@ Exemple :     { 1 2 3 4 5 } LPOP => { 2 3 4 5 } 1
@------------------------------------------------------------------------------
 LPop
  « DUP TAIL SWAP HEAD »

@============================================================================== 
@ LZip – « Zip » une liste de listes de même nombre d'éléments comme suit :
@ Description :
@    Lev.1                    Lev.1
@------------------------------------------------------------------------------
@ {{e11 e12 … e1a} {e21 e22 … e2b}… } → {{e11 e21 … ea1} {e12 e22 … eb2} … }
@------------------------------------------------------------------------------
@ Exemple : 
@ {{ 1 A } { 2 B } { 3 C }} → {{ 1 2 3 } { A B C}}
@ {{ 1 2 3 } { A B C } { x y z }} →  {{ 1 A x} {2 B y } {3 C z}}
@------------------------------------------------------------------------------
 LZip
  « OBJ→ DUP 'nl' LSTO « nl →LIST » DOLIST »

@============================================================================== 
@ LFilter – Sélectionne les éléments d'une liste
@ Description : Filtre une liste en fonction d'un programme
@
@    Lev.1            Lev.2        Lev.1            
@------------------------------------------------------------------------------
@    {e1 e2 … en}        « Prog »  →     {e? e? … }
@------------------------------------------------------------------------------
@ Exemple :     { 1 2 3 4 5 6 7 } « 2 MOD »    → { 1 3 5 7 }
@------------------------------------------------------------------------------
 LFilter 
  « → filtre « « IF DUP filtre NOT THEN DROP END » MAP » » 

@============================================================================== 
@ NL→I – Transforme une liste de chiffres en un nombre
@ Description : Number List to integer
@
@    Lev.1            Lev.1            
@------------------------------------------------------------------------------
@    {n1 n2 … nn}    →      n1n2…nn
@------------------------------------------------------------------------------
@ Exemple :     { 1 2 3 4 5 6 7 } → 1234567
@------------------------------------------------------------------------------
 NL→I
  « « →STR + » STREAM STR→ » 

@============================================================================== 
@ I→NL – Transforme un nombre en une liste de chiffres
@ Description : Number List to interger
@
@    Lev.1            Lev.1            
@------------------------------------------------------------------------------
@    n1n2…nn         →     {n1 n2 … nn}    
@------------------------------------------------------------------------------
@ Exemple :     1234567 → { 1 2 3 4 5 6 7 } 
@------------------------------------------------------------------------------ 
 I→NL
  « 
   →STR UTF8→ 
   « IF DUPDUP #3Ah ≤ SWAP #30h ≥ AND THEN →UTF8 STR→ ELSE DROP END » MAP
  »

@============================================================================== 
@ LDdup – Déduplication des doublons d'une liste
@ Description : Liste Déduplication. 
@
@    Lev.1            Lev.1            
@------------------------------------------------------------------------------
@    {e1 e2 … en}    →     {e? e? … }    
@------------------------------------------------------------------------------
@ Exemple :     { 9 2 3 9 4 1 2 7 7  3 5 6 7 } → { 9 2 3 4 1 7 5 6 }
@------------------------------------------------------------------------------ 
 LDdup 
  « 
   REVLIST OBJ→ {}
   1 ROT START
    IF SWAP DUP2 POS THEN DROP ELSE ADD END
   NEXT 
  » 

@============================================================================== 
@ LUnion – Union de deux listes
@ Description : 
@
@    Lev.1        Lev.2            Lev.1            
@------------------------------------------------------------------------------
@    {e11 e12 … e1a}    {e21 e22 … e2b}    →     {e? e? … }    
@------------------------------------------------------------------------------
@ Exemple :     { 9 2 3 4 } { 1 2 7 9 } → { 9 2 3 4 1 7  }
@------------------------------------------------------------------------------ 
 LUnion
  « ADD LDdup »

@============================================================================== 
@ LInter – Intersection de deux listes
@ Description : 
@
@    Lev.1        Lev.2            Lev.1            
@------------------------------------------------------------------------------
@    {e11 e12 … e1a}    {e21 e22 … e2b}    →     {e? e? … }    
@------------------------------------------------------------------------------
@ Exemple :     { 9 2 3 4 } { 1 2 7 9 } → { 9 2 }
@------------------------------------------------------------------------------ 
 LInter
  « → Lst2
   « « IF DUP Lst2 SWAP POS NOT THEN DROP END » MAP »
  »

@============================================================================== 
@ LDiff – Différences entre deux listes
@ Description :  
@
@    Lev.1        Lev.2            Lev.1            
@------------------------------------------------------------------------------
@    {e11 e12 … e1a}    {e21 e22 … e2b}    →     {e? e? … }    
@------------------------------------------------------------------------------
@ Exemple :     { 9 2 3 4 } { 1 2 7 9 } → { 3 4 1 7 }
@------------------------------------------------------------------------------ 
 LDiff
  « → Lst2
   « « IF DUP Lst2 SWAP POS THEN DROP END » MAP »
  »

@============================================================================== 

END
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: newRPL - build 1001 released! - pier4r - 12-16-2017, 08:03 AM
newRPL - on Hp 39gs - Martin Hepperle - 06-05-2019, 06:51 AM
RE: newRPL - build 1001 released! - pier4r - 12-23-2017, 10:16 AM
RE: newRPL - build 1001 released! - pier4r - 01-01-2018, 09:42 AM
t - Claudio L. - 01-01-2018, 03:06 PM
RE: newRPL - build 1001 released! - pier4r - 01-01-2018, 03:41 PM
RE: newRPL - build 1001 released! - pier4r - 01-02-2018, 04:54 PM
RE: newRPL - build 1001 released! - pier4r - 01-02-2018, 06:58 PM
newRPL - brickviking - 10-05-2018, 06:01 AM
RE: newRPL - build 1089 released! [update:build 1158] - Gilles - 05-20-2019 09:26 PM
How to participate? - erazor - 12-13-2019, 07:12 AM



User(s) browsing this thread: 2 Guest(s)