Uwaga: Jestem gotów udzielić nagrody za każdą odpowiedź, którą uważam za interesującą.
Twoim wyzwaniem jest zaprojektowanie kompletnego zestawu instrukcji Turinga (OISC):
OISC to abstrakcyjna maszyna, która korzysta tylko z jednej instrukcji - eliminuje potrzebę używania kodu maszynowego w języku maszynowym. Dzięki rozsądnemu wyborowi pojedynczej instrukcji i nieskończonym zasobom OISC może być uniwersalnym komputerem w taki sam sposób, jak tradycyjne komputery z wieloma instrukcjami.
Oto kilka przykładów pojedynczych poleceń, które składają się na OISC-Turinga.
Zasady:
Musisz przedstawić interpretację lub dowód
Musisz zapewnić tłumacza dla twojego języka. Tłumacz ten powinien być ograniczony tylko pamięcią / czasem (np. Nie może mieć ograniczeń narzuconych przez użytkownika). Jeśli nie zapewnisz tłumacza dla swojego języka (z jakiegokolwiek innego powodu niż lenistwo), musisz udowodnić, że można go napisać. Tłumacz musi być możliwy .
Musisz udowodnić kompletność Turinga
Musisz załączyć formalny dowód, że Twój język jest kompletny w Turingu. Prostym sposobem na to jest udowodnienie, że potrafi interpretować lub zachowywać się tak samo, jak inny język kompletny Turinga. Najbardziej podstawowym językiem do tłumaczenia byłby Brainf ** k .
Na przykład normalny język, który ma wszystkie te same polecenia co Brainf ** k (i ten sam brak ograniczeń pamięci narzuconych przez użytkownika), jest Turing-complete, ponieważ wszystko, co można zaimplementować w Brainf ** k, można zaimplementować w tym języku .
Oto lista bardzo prostych do wdrożenia kompletnych języków Turinga.
Dodatkowe wymagania OISC
Ten OISC powinien mieć tylko jedną instrukcję - nie może mieć wielu instrukcji z jedną z nich, co czyni ją kompletną metodą Turinga.
Twój OISC może używać dowolnej składni, którą lubisz. W swojej odpowiedzi powinieneś zdefiniować, czym jest instrukcja, co to dane, a co brak możliwości (np. Białe znaki). Bądź kreatywny!
Argumenty nie muszą być tylko liczbami całkowitymi. Na przykład /// jest pięknym przykładem kompletnego OISC Turinga.
To, jak i czy dane wejściowe i wyjściowe są pobierane i podawane, należy do Ciebie. Większość OISC implementuje I / O poprzez określone lokalizacje pamięci, ale mogą istnieć inne sposoby na to, i zachęcamy do znalezienia takiego.
Prawidłowa odpowiedź musi zawierać przykładowy kod w Twoim OISC, albo poprzez włączenie go do postu, albo link do prostego zadania rozwiązanego w języku.
Głosowanie
Głosujący, pamiętajcie, aby nie głosować nudnych zgłoszeń. Przykłady:
- Lenguage - równoważne
- Implementacja istniejącego OISC (odpowiedzcie, proszę stworzyć własne!)
- „OISC”, w którym pierwszy argument określa polecenie do wywołania ( przykład )
Należy jednak głosować na ciekawe, kreatywne zgłoszenia, takie jak:
- OISC oparty na równaniu matematycznym
- Kompletny ZISC Turinga oparty na sieci neuronowej
- OISC, w którym wyjściowe operacje we / wy zdarzają się w inny sposób niż niektóre lokalizacje pamięci
Zwycięski
Podobnie jak w przypadku konkursu popularności , wygrywa odpowiedź z największą liczbą głosów! Powodzenia!