2010-05-03 22 views
21

Czy ktoś wie o bibliotece struktur danych C++, zapewniającej funkcjonalne (niezmienne lub "trwałe" w sensie FP) funkcjonalne odpowiedniki znanych struktur STL?Struktury danych funkcjonalnych w C++

Przez "funkcjonalny" mam na myśli to, że same obiekty są niezmienne, podczas gdy modyfikacje tych obiektów zwracają nowe obiekty dzielące te same obiekty wewnętrzne, co obiekt nadrzędny tam, gdzie jest to właściwe.

Idealnie, taka biblioteka byłaby podobna do STL i działałaby dobrze z Boost.Phoenix (uwaga - w rzeczywistości nie używałem Phoenixa, ale o ile wiem, zapewnia on wiele algorytmów, ale bez struktur danych, chyba że Leniwie obliczona zmiana do istniejącej struktury danych się liczy - prawda?)

+0

Czy nie można uzyskać w przybliżeniu wymaganego efektu, przekazując i zwracając wszystkie obiekty według wartości? –

+4

Tylko jeśli mógłbym znieść wydajność i obciążenie pamięci. Sztuczka z funkcjonalnymi strukturami danych polega na tym, że udostępniają one elementy wewnętrzne, gdy tylko jest to możliwe. Jest to bezpieczne, ponieważ obiekty są niezmienne i jest o wiele mniej potrzebnych pamięci i procesorów, niż zwracanie wartości na dużych strukturach danych. – drg

+6

Naprawdę zainteresowałem się tym samym pytaniem, współtworząc raport z doświadczeń pod adresem http://portal.acm.org/citation.cfm?id=1596591. W tamtym czasie doszedłem do wniosku, że naprawdę potrzebujesz zbierania śmieci: zaletą trwałej struktury jest dzielenie się, ale w obecności dzielenia się nie ma już wyraźnej własności żadnego węzła, więc jakiś centralny autorytet (GC) musi zdecydować, które węzły mogą zostać odzyskane. To, lub nie ma znaczenia dla twojej aplikacji, że węzły są przydzielane tylko i nigdy nie są zwalniane. –

Odpowiedz

3

Chciałbym sprawdzić, czy FC++ opracowany przez Yannis Smaragdakis zawiera żadnych struktur danych. Z pewnością ten projekt bardziej niż jakikolwiek inny dotyczy wspierania funkcjonalnego stylu w C++.

+0

Wygląda na interesującą bibliotekę, ale nie ma ostatniej aktywności. Jest tam typ danych o stałej liście, ale nie wydaje się być dobrym do ogólnego użytku poza FC++. – drg

1

To więcej niż jedna szczegółowa odpowiedź, ale wydaje się, że Bartosz Milewski włożył w to dużo pracy. Patrz, na przykład:

http://bartoszmilewski.com/2013/11/13/functional-data-structures-in-c-lists/

Wygląda on realizowany wiele algorytmów z książki Okasiki za czysto funkcjonalne struktury danych tutaj:

https://github.com/BartoszMilewski/Okasaki

nb Jeszcze ich nie wypróbowałem, ale są to pierwsze stałe struktury danych w C++, które widziałem poza FC++.

Mam nadzieję, że wkrótce będę mógł je przetestować.

+0

Wygląda na to, że brakuje im ważnych części ... takich jak skasowanie – Michael