5

Niektóre problemy z programowaniem nie wymagają pełnej mocy maszyny Turinga do rozwiązania. Można je rozwiązać za pomocą znacznie mniejszej mocy. Szukam języka programowania z mniejszą mocą.Czy istnieje język programowania, który ma tylko moc deterministycznych automatów push-down, i nic więcej?

Czy istnieje taki język wysokiego poziomu, który jest ograniczony do wsparcia tylko tych możliwości:

  1. stos z operacji popychają wartości na wartości stosu i zasnąć stosie.

  2. Skończona maszyna stanów (FSM) do wprowadzania wartości, przechodzenia od stanu do stanu, interakcji ze stosem i wyników wyjściowych.

Zdaję sobie sprawę, że mogę używać Java lub C lub Python (itp) i ograniczyć język pisząc program, który używa tylko stos i FSM. Jednak szukam języka programowania, który ma takie możliwości i nic więcej.

Innymi słowy, nie chcę używać języka programowania Turinga, aby rozwiązywać problemy wymagające tylko deterministycznego automatyzmu wypychania. Chcę używać języka programowania, który ma tylko moc deterministycznych automatów push-down.

Odpowiedz

0

Krótko mówiąc, nie znajdziesz języka wysokiego poziomu z tak małą mocą. Nie jest to ściśle z definicji, ale wysoki poziom oznacza pewną ilość abstrakcji, która odpowiada złożoności.

Jednak to nie jest problem: nie musisz martwić się o użycie zbyt dużej mocy. Język maszynowy, kanonicznie efektywny język (minimalny narzut!) Jest kompletny Turinga, co oznacza, że ​​wydajność nie jest ściśle związana z mocą teoretyczną.

+2

Może pytający nie szukał wydajności, ale zamiast tego ładne właściwości, które pochodzą z używania modelu obliczeniowego z mniejszą mocą niż maszyna Turinga? Może chciał dowiedzieć się o właściwościach swojego programu, które byłyby nierozstrzygalne dla maszyny Turinga, ale jest to rozstrzygające dla mniej wydajnego modelu obliczeniowego. – Guildenstern

+0

Dobra uwaga, dziękuję! Myślę, że odpowiedź prawdopodobnie nadal wraca do "prawdopodobnie nie nazwałbyś tego językiem programowania, gdyby miał tak małą moc". Podejrzewam, że możesz znaleźć ten rodzaj w rodzaju "kleju" lub w prostych skryptach, chociaż nie mogę znaleźć dobrego przykładu. Wyrażenia regularne (w ich prostej postaci) są jednak kanonicznie równe dla skończonej maszyny stanów. To pytanie http://stackoverflow.com/questions/315340/practical-non-turing-complete-languages ​​ma kilka interesujących odpowiedzi. – akroy

0

Nie jestem pewien, czy to się liczy, ale grammy LR (1) wychwytują dokładnie moc deterministycznych urządzeń PDA - jeśli istnieje gramatyka LR (1) dla danego języka, istnieje deterministyczny PDA i vice versa . Dlatego jeśli spojrzysz na narzędzia takie jak yacc lub żubr, ustaw je tak, by używały gramatyk LR (1) i nie zezwalaj na działania semantyczne z dowolnym kodem, możesz argumentować, że to, co pozostało, jest środowiskiem programistycznym z dokładnie taką mocą deterministycznego urządzenia PDA. To prawda, że ​​jest trochę naciągany. :-)

Mam nadzieję, że to pomoże!

Powiązane problemy