Czy istnieje sposób na zastosowanie funkcji do krotek członków jako argumentów funkcji? A jeśli nie, czy mogę w jakiś sposób utworzyć funkcję z dowolną liczbą argumentów iw jej ciele zastosować jakąś inną funkcję do "ogona", jak byłoby to jego argumentem?Rozkładaj krotkę w OCaml
Odpowiedz
W ogólnym przypadku nie. W przypadku 2 argumentów można użyć funkcji curry
i uncurry
w Batteries extensions to Pervasives.
To może można ugotować coś z modułem Obj
, podobnie jak wewnętrzne z printf
zrobić, ale chciałbym pozostać daleko daleko od tego. Trudność polega na tym, że system typów nie daje sposobu na wyrażenie rodzaju uogólnionej funkcji curry
lub uncurry
. System typów nie pozwala ci "obliczyć" długości krotki - 2-krotna to 2-krotna i nie masz możliwości wyrażenia, że (a*b*c)
jest naprawdę (a*b)
z dodatkowym komponentem. printf
ma specjalne wsparcie kompilatora, aby typy działały poprawnie, a to powoduje, że typ funkcji jest częścią typu formatu (więc podobne rozwiązania nie będą działały dla krotek).
Sam język nie pozwala na zdefiniowanie funkcji krotek o dowolnym rozmiarze.
Możliwe jest jednak zdefiniowanie funkcji z dowolną liczbą argumentów, postępując zgodnie z this folding technique (jest to opisane tam dla SML, ale działa równie dobrze w OCaml).
- 1. Typy rekursywne w OCaml?
- 2. Jak spłaszczyć krotkę w pytonie
- 3. Haskell: jak zmapować krotkę?
- 4. Jak spłaszczyć zagnieżdżoną krotkę?
- 5. Typy zależne w OCaml
- 6. Zrozumienie funktorów w OCaml
- 7. Wyrażenia regularne w OCaml
- 8. Integer potęgowanie w OCaml
- 9. Typy liniowe w OCaml
- 10. Widen typy w ocaml
- 11. Bitowe operacje w OCaml
- 12. Przeciążanie w Ocaml
- 13. Sprawdzanie podłańcucha w Ocaml
- 14. OCaml w stosie korporacyjnym
- 15. Hashtables w ocaml
- 16. Topologiczny sort w OCaml
- 17. Słaby polimorfizm w OCaml
- 18. Czy OCaml ma ogólne funkcje map()/reduce()?
- 19. Scala przekształcić listę krotek w krotkę list
- 20. Jak utworzyć krotkę pustej krotki w Pythonie?
- 21. Dopasuj krotkę o nieznanym rozmiarze w scala
- 22. Drukowanie OCaml AST jako OCaml Code
- 23. Parsować krotkę z ciągu znaków?
- 24. Jak przekonwertować tablicę na krotkę?
- 25. C++: przekonwertuj wektor na krotkę
- 26. scala - dodaj krotkę do listyBuffer
- 27. Ocaml - Lazy.force
- 28. ocaml interpreter
- 29. Jak odczytać bitmapę w OCAML?
- 30. Zmiana kolejności aplikacji w OCaml