< Back to IRCAM Forum

Some functions (apply, g-scaling ,cartesian, ... ) seem restricted

bonjour

certaines fonctions ( Apply, g-scaling … ) semblent “bridées” à des listes maximales de 2048 éléments
( 2 ^11) … quelque soit la machine et l’OS employés ; y a t’il moyen de modifier cette limitation qui semble héritée d’une autre période géologique :wink: ?

y a t’il une limite “connue” au produit cartésien Lisp : cartesian … j’expérimente des comportements “bizarres” au delà d’un certain seuil ( les data STORE semblent “se vider” de leur contenus alors que les data conservée sous forme de TXT résistent … ) pourtant il s’agit de rechercher des degrés communs partagés entre des banques de 100 accords de 48 partiels ; jusqu’à un certain seuil il “suffit” d’attendre quelques minutes, au delà cela tourne indéfiniment avec le redémarrage comme seul recours

quelqu’un a - t’il expérimenté l’efficacité des 3 méthodes d’opérations récursives ( OMLOOP, Mapcar-reduce- apply + patch en lambda, Patch auto récursif ( s’incluant lui -même ) ) en terme de temps de calcul, en terme d’acceptation de longueur de liste à traiter ?

si ces questions sont triviales ou on déjà été répondues veuillez m’excuser

très solidaire
très cordialement

Thierry De Mey

Cher Thierry,

Non pas du tout, c’est tres pertinent.

Pour la premiere question, oui apply est limitte a 2047 element (limitation LispWorks), more on this:
http://www.lispworks.com/kb/4fbc798cb17237ca852566da005fcc79.html

Utiliser dans ce cas reduce a la place:

Screenshot_2022-05-27_13-13-25

Pour la 2eme question, c’est plutot du a STORE (une limitation?). Dans ces cas moi j’utilise un setf via lisp plutot cela ‘New lIsp Function’ comme ceci:

Avantage: on peut donc faire des pop et push dans la variable. Par contre prendre bien soin a nommer la variable de facon qu’elle soit unique.

Pour la derniere question, il n’y a pas du tout de cas general, (preference entre loop, macpar, etc. Cela depend beaucoup du code,

Un petit exemple ici:
http://www.lispology.com/show?XHZ

Bien a toi

K

merci Karim pour ces réponses rapides ; j’explore tout çà et me construit mes “banques de spectres” suivant tes conseils :wink: belle journée Thierry DM ( “ghost in the machine buster” )

ps : pour la limite des 2047 … je n’ai rien trouvé de mieux que de diviser la listes en X sous-listes, de les traiter séparément, puis de les re-merger … cela fonctionne mais laborieux et sources d’erreurs pour les opérations qui nécessitent de traiter l’ensemble de la liste : le scaling sum par exemple ( pour scaler des durées de notes en fonction d’une durée globale que l’on souhaite adapter ; si tu as une idée ?

De rien Thierry,

Pour la scaling-sum, voila un petit fichier lisp a mettre dans init. J’ai juste remplacer dans le code apply avec reduce et ca marche. Je pense le faire dans le code prochainement si c’est utile.

scaling-sum.lisp (292 Bytes)

Amities
K