Ponieważ są one w .Net 3.5. Wiem, że są w wersji 4.0, ponieważ to jest to, z czym pracuje DLR, ale interesuje mnie wersja, którą mamy teraz.Czy drzewa wyrażenia LINQ Turing complete?
Odpowiedz
wyrażenie LINQ drzewa mogą reprezentować wszystko można umieścić w normalnym C# wypowiedzi. Jako takie, nie mogą być wykorzystane do bezpośredniego reprezentowania while
pętle, for
pętle itd
Jednakże, jest to teoretycznie możliwe, aby używać wyrażeń lambda i rekursji do przeprowadzenia jakiejkolwiek iteracji mogą być potrzebne. W praktyce może być łatwiej upuścić metody Enumerable
do drzewa.
Bez zdefiniowania rzeczą, która wykona drzewa, nie wiemy. W samej interpretacji CLR (podczas kompilowania ich na delegatów) są oni. Ale jeśli przetłumaczysz je na SQL, to nie są, i możesz wymyślić własną, mylącą interpretację ich z dowolnymi właściwościami, które lubisz.
Dopóki nie zdecydowałeś, jak je interpretować, są one po prostu struktur danych.
Cóż, dlaczego nie spróbujesz to udowodnić? Założę się, że jest to zabawne wyzwanie;)
Ale drzewa wyrażeń reprezentują tylko wyrażenie i jako takie musisz zdefiniować, co możesz zrobić, jak stwierdził Earwicker.
Jeśli pozwolisz drzewa wyrażenie użyć rekurencji można osiągnąć powtórzenia czyli pętle i takie.
Jednak nie pomnożony rachunek lambda to Turing-complete Turing_completeness # Examples ale Lambda calculus nie zezwala na rekursję per se Lambda_calculus # Rekursja jest bardzo ryzykowna.
chciałbym stwierdzić, że ekspresja prawdopodobnie Turinga kompletne, ale będzie to wymagało kogoś, kto jest bardziej zaznajomieni z tym, aby je potwierdzić.
Nie musisz "zezwalać" drzewom na używanie rekursji - mogą już to być: http://blogs.msdn.com/madst/archive/2007/05/11/recursive-lambda-expressions.aspx –
We wczesnym projekcie C# 3.0 specyfikacji znajdował się komentarz na marginesie sekcji na drzewach ekspresyjnych, że powiedział:
mam fenomenalnym dowód Turinga-zupełności których ten margines jest zbyt wąskie do zawarcia.
Niestety, nikt nie był w stanie dowiedzieć się, kto to napisał lub opracować dowód.
Hahaha. .. Zastanawiam się, czy ktoś inny to dostanie. – TraumaPony
lol - bardzo dobrze. –
W pobliżu wypluć ... dobry. :) –
- 1. Czy mój program Turing-complete?
- 2. Czy język może być Turing-complete bez wsparcia dla tablic?
- 3. Czy procesor wstępny C++ jest metaprogramowaniem Turing-complete?
- 4. Wyrażenia LINQ?
- 5. Czy minimalizacja wyrażeń boolowskich NP-Complete?
- 6. Konwersja drzewa Lambda do wyrażenia
- 7. Refactor wybierz część wyrażenia Linq?
- 8. Łączenie drzewa wyrażenia .NET w nowy zespół
- 9. Turing kompletność rachunku lambda?
- 10. Drzewa wyrażeń Linq w zwartej strukturze
- 11. nazwa metody wyodrębniania z wyrażenia linq
- 12. Tworzenie wyrażenia Linq dynamicznie zawierającego podzapytanie
- 13. Czy istnieje książka "Code Complete" dla Ruby?
- 14. LINQ do SQL: Ponowne użycie wyrażenia lambda
- 15. Linq, wyrażenia, NHibernate i lubią porównania
- 16. Kiedy napis AsynchronousFileChannel "complete"?
- 17. ASP.NET Auto Complete DropDownList
- 18. Terminal Mac Auto Complete
- 19. command not found: complete
- 20. clang complete nie działa
- 21. Turing Kompletny alfanumeryczny zestaw instrukcji x86 (podzbiór)
- 22. Jawne drzewa wyrażeń
- 23. Czy dojdzie do zakończenia Turinga?
- 24. Swift Xcode debug auto complete
- 25. SplashScreen.Close (Timespan.FromMilliseconds (int)): Czy zostało wysłane zdarzenie w Timespan Complete?
- 26. NHibernate linq - Użyj wyrażenia lambda zamiast atrybutu formuły na mapowaniu
- 27. Łączenie wielu wyrażeń drzewa
- 28. Implementacja drzewa binarnego drzewa javascript
- 29. Zastanawiam się, czy MATLAB jest kompletny Turinga (uniwersalny obliczeniowo)?
- 30. LINQ - czy można cofnąć?
Drzewa wyrażeń LINQ nie obsługują rekursji, więc jedyną opcją wydaje się być ucieczka do boksu i kombinator y, które będą bardzo powolne (alokacja na wywołanie funkcji). –