En développant BigZ, principalement utilisé pour des expériences théoriques numériques, j'ai découvert le besoin d'orthogonalité dans l'ensemble de mots qui crée, filtre ou transforme des ensembles. Je veux quelques mots qui combinent logiquement une large gamme de commandes, sans avoir besoin de mémoriser un grand nombre de mots et de les combiner.Comment compter les habitants dans ANS-Forth?
1 100 condition isprime create-set
mettre l'ensemble des nombres premiers entre 1 et 100 sur une pile de jeu, tandis que
function 1+ transform-set
transformer cet ensemble à l'ensemble de tous les nombres p + 1, où p est un nombre premier moins à 100.
en outre,
condition sqr filter-set
quitte l'ensemble de tous les carrés parfaits sur la forme p + 1 sur la pile. Cela fonctionne plutôt bien pour les ensembles de nombres naturels, mais pour pouvoir créer, filtrer et transformer des ensembles de n-tuples, j'ai besoin de pouvoir compter les locals dans des mots sans nom. Je redessiné mots pour désigner peu des conditions et des fonctions composées:
: ~ :noname ;
: :| postpone locals| ; immediate
1 100 ~ :| p | p is prime p 2 + isprime p 2 - isprime or and ;
1 100 ~ :| a b | a dup * b dup * + isprime ;
d'exécution ces deux exemples donne la pile de paramètres (1 100 xt), mais pour être capable de gérer ce droit, dans le premier cas, un ensemble de nombres et dans le second cas, un ensemble de paires devrait être produit, je devrai compléter le mot: | pour obtenir (1 100 xt n) où n est le numbet des locaux utilisés. Je pense qu'on pourrait utiliser> IN et PARSE pour le faire, mais il y a longtemps, j'ai fait de telles choses, donc je doute que je puisse le faire correctement de nos jours.
Si vous le dites. Je ne sais pas comment cela fonctionne, mais je vais essayer de le découvrir. – Lehs
Le document indique que (local) est indéfini à la fois en mode interpréter et en mode compilation et qu'il semble dépendre de l'implémentation. – Lehs