2011-11-10 11 views
7

W typowym seplenie możemy użyć funkcji remove.Jaki jest standardowy sposób na usunięcie elementu z listy w OCaml?

Wygląda na to, że nie ma takiej metody w OCaml?

+0

Dokładnie w jaki sposób należy usunąć? Czy chcesz tylko "filtrować" (http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html) listę? (["usuń"] (http://www.lispworks.com/documentation/HyperSpec/Body/f%5Frm%5Frm.htm), przynajmniej w rozumieniu Common Lisp to bardzo, bardzo przerażająca bestia .../zakresy końcowe, liczba, klucze i predykaty, o mój!) –

Odpowiedz

14

Listy w języku OCaml są niezmienne. Więc nie możesz ich usunąć z nich. Zwykle tworzysz kolejną listę, która nie ma rzeczy, których nie chcesz. W tym celu użyjesz List.filter.

Jeśli musisz mieć listy, które można zmieniać, możesz. W Batteries jest coś o nazwie Dllist, które może być jak to, co chcesz. (Jest to podwójnie związana lista, w przeciwieństwie do listy Lisp).

Jedną z najlepszych rzeczy na temat OCaml, moim zdaniem, jest to, że czysty podzestaw funkcjonalny jest naprawdę całkiem skuteczny. Nigdy nie musiałem używać zmiennych list w moich własnych projektach.

+0

Rozumiem. Powinienem użyć List.filter. –

+0

Cześć Jeffrey, co jeśli chcę przechowywać niektóre elementy w jednej strukturze danych, i nie jest odpowiednie, aby bezpośrednio napisać funkcję rekurencyjną, aby to zrobić? – computereasy

+0

Krótka odpowiedź: zawsze jest odpowiednia! :-) Dłuższa odpowiedź: możesz użyć struktur zmiennych, jeśli masz dobry powód. Będziesz musiał zadać to pytanie jako bardziej szczegółowe, osobne pytanie, aby uzyskać lepszą odpowiedź. –

Powiązane problemy