J'essaie d'écrire un peu de code dans Brainfuck, mais je suis tombé sur certains problèmes.
Cela m'a demandé de vous demander comment BrainFuck Turing Turing complète, si je comprends, il contient des moyens complètes, une langue ou une machine peut calculer n'importe quelle fonction.
Qu'est-ce qui me demandait comment, c'est que je n'ai pas été capable de trouver ou de trouver un moyen de trouver le signe d'un numéro. Étant donné que la fonction Signum est une fonction et une machine complète Turing peut calculer toutes les fonctions, comment peut-on être complète de Brainfuck?
La réponse que je recherche est une explication pour laquelle ma déclaration est vraie ou fausse ou un algorithme pouvant calculer le signe d'un nombre.
En supposant que les "cellules de mémoire" de Brainfuck ont des valeurs minimales et maximales *, il suffit de mettre le numéro dans deux cellules, puis continuez d'incrémenter un et continuez à décrémenter l'autre jusqu'à ce que l'un d'entre eux frappe zéro. Il y a votre algorithme de signe.
Maintenant pour la question générale. "Une machine complète Turing peut calculer toutes les fonctions" n'est pas une excellente définition pour commencer, car "la fonction" est trop vague. Cela vous permettrait de discuter que Brainfuck ne soit pas terminé, car il est impossible d'écrire des serveurs Web et des navigateurs Web, ou que C++ 03 ne soit pas terminé, car il est impossible d'écrire des programmes multi-filetés (sans non- extensions standard).
Apprendre à former formellement la totalité de la complétude de Turcy, c'est quelque chose de mieux tiré d'un manuel sur la théorie du calcul. Mais il existe de nombreuses heuristiques utiles que vous pouvez utiliser dans la pratique, telles que:
Brainfuck répond à tous ces critères. La plupart des implémentations en matière d'hébergement échouent sans soumission des critères de mémoire, mais cet argument s'applique à toutes les langues de programmation puisque dans les ordinateurs du monde réel ont toujours une mémoire finie.
* Techniquement, la norme non officielle célébrités permet une mise en œuvre "Bignum", et j'ignore également la possibilité de saisir un numéro qui ne correspond pas à une cellule de mémoire pour une implémentation non-Bignum . Mais j'ai décidé de ne pas me nerd-snipe moi-même avec ces problèmes pour le moment; Je suis à peu près sûr qu'ils peuvent être résolus si nous voulions vraiment.