Piszę program rakietowy, który szeroko wykorzystuje zestawy. Patrząc na wynik programu, kilka zestawów zawiera # 0 # jako ich jedyną część danych. Co to powoduje?Dlaczego zestaw (lub lista) w Racket drukuje z # 0 # jako jedyną częścią danych?
Odpowiedz
#0#
jest używany w drukarce rakietowej do opisywania cyclic data structures lub obiektów z pamięcią wspólną. Zasadniczo, sposób działania polega na tym, że istnieje obiekt oznaczony, powiedzmy, #0=
, a następnie, gdy widzisz, #0#
odnosi się do tego obiektu.
Tak na przykład:
#0=(1 . #0#)
jest lista nieskończonej długości zawierający tylko 1
s. Dzieje się tak, ponieważ utworzona struktura danych to tylko para wad, gdzie pierwszy element to 1
, a drugi element wskazuje na siebie.
Możesz mieć dowolną ich liczbę, aby tworzyć bardziej złożone struktury wykresów. Takich jak:
#0=(#1=(1 . #0#) . #1#)
Wreszcie, nie trzeba mieć cyklicznej struktury danych w ogóle. Powiedzmy X by³ następujące struktury danych:
'(#0=#&42 . #0#)
(wehre #&
oznacza pole zmienny) mutacje elementu w pierwszym elemencie z pary będzie dodatkowo zmutować element drugiej części pary. Więc jeśli para ta została powołana do zmiennej x
, a następnie:
> x
'(#0=#&42 . #0#)
> (set-box! (car x) 43)
> (car x)
'#&43
> (cdr x)
'#&43
> x
'(#0=#&43 . #0#)
Normalnie nie można napisać to bezpośrednio w kodzie bezpośrednio w kodzie, ale jest możliwe do skonstruowania go za pomocą read
.
> (define x (read)
#0=(1 . #0#)
> x
#0='(1 . #0#)
> (car x)
1
> (cadr x)
1
> (cdr x)
#0=1(1 . #0#)
Można również zmodyfikować czytelnikowi tylko pozwalają umieścić go w kodzie bezpośrednio z read-accept-graph
podczas czytania w kodzie źródłowym modułu.
- 1. Zestaw hibernacji lub lista
- 2. Redis "nil" lub "pusta lista lub zestaw"
- 3. Dlaczego printf() drukuje 0 zamiast 10 w następującym kodzie?
- 4. DateFormat drukuje new Date (0) jako epoki + 1 godzina
- 5. Dlaczego powierzchnia powraca jako 0?
- 6. Lista zastosowań RVM [0]
- 7. Dlaczego przekazujemy 0 jako parametr "wyjścia"?
- 8. Dlaczego StringBuilder nie drukuje?
- 9. Dlaczego: sprint zawsze drukuje "_"?
- 10. Co robi "zestaw + 0" w instrukcji SQL?
- 11. PHP traktowało "0" jako puste?
- 12. Dlaczego wyrażenie (0 == 0 & 1 == 1) jest oceniane jako Fałsz?
- 13. Dlaczego jest to renderowane jako lista "System.Web.Mvc.SelectListItem"?
- 14. Zestaw Drawable lub Bitmap jako ikona W powiadomieniu w Androidzie
- 15. Zdefiniowane stałe jako argument formatu printf, dlaczego dodano "+ 0"?
- 16. Dlaczego pętla jest tak powolna w kodzie Racket
- 17. Pandy: Uzyskaj jedyną wartość serii lub nan, jeśli nie istnieje
- 18. Jak wyświetlić wynik wiersza poleceń w Racket?
- 19. JPA OneToMany: Lista kontra zestaw
- 20. Dlaczego C drukuje moje wartości szesnastkowe niepoprawnie?
- 21. Jak mogę załadować zestaw odwzorowany w hibernacji jako zestaw niemodyfikowalny?
- 22. Dlaczego awk nie drukuje nowych linii?
- 23. Dlaczego drukuje odwrotny ciąg znaków?
- 24. Lista wartości: Stałe kodowe lub baza danych?
- 25. Statyczny zestaw danych szyn
- 26. TensorFlow utworzyć zestaw danych z tablicy numpy
- 27. Ładowanie obrazów w katalogu jako zestaw danych Tensorflow
- 28. #if 0 jako określenie
- 29. normalizujący zestaw danych z rubinem
- 30. zestaw obraz jako przycisk