Może to zbyt proste, ale nie mogę znaleźć żadnej odpowiedzi w Internecie
Próbuję zwiększyć wartość w F # (jak count++
w C#).
Nie chcę używać opcji "zmienne", Po prostu chcę zobaczyć przykład, który powinien wyglądać funkcja Inkrementacja w F #.
I jak z tego korzystać.Przyrost wartości w F #
Odpowiedz
Idea "zwiększania wartości" w takim samym sensie, jak w C++ ma sens jedynie w przypadku pracy z zmiennymi wartościami lub w przypadku korzystania z mutowalnej komórki odniesienia (zasadniczo prostego obiektu przechowującego wartości zmienne). Jeśli masz zmienny komórkę odniesienia, można użyć incr
funkcję:
let count = ref 0
incr count
jeśli użyć zmiennej zmienny, to nie ma wbudowaną funkcję do tego i trzeba napisać count + 1
:
let mutable count = 0
count <- count + 1
Jeśli piszesz kod przy użyciu niezmiennych wartości, to zazwyczaj wystarczy napisać count + 1
, a następnie przekazać wynik do jakiejś funkcji (lub gdzie indziej - zależy to od konkretnego przypadku). Na przykład, aby obliczyć długość listy F #, należy napisać:
let rec length list =
match list with
| [] -> 0
| _::tail -> 1 + (length tail)
W tym przykładzie wyrażenie 1 + (...)
jest kod odpowiadający i++
w kod C++, który wykonuje iteracje nad listą i oblicza jego długość. Wynik wyrażenia nie jest przypisany do nowej zmiennej, ponieważ jest zwracany bezpośrednio w wyniku działania funkcji length
.
EDYCJA Parametry funkcji są niezmienne, co oznacza, że nie można zmienić ich wartości. Jak wspomniał Lee, możesz użyć zmiennej shadowing, aby ukryć starą wartość z nową - ale pamiętaj, że ma ona tylko efekt lokalny (to jest jak definiowanie nowej zmiennej o innej nazwie do zapisania nowej wartości). Na przykład:
let rec length list count =
match list with
| [] -> count
| _::tail ->
let count = count + 1 // Variable shadowing used here
length tail count
Nie można napisać funkcję do uproszczenia linię let count = count + 1
i jak wspomniano powyżej, jest to równoznaczne z pisania let newCount = count + 1
a następnie za pomocą newCount
na ostatniej linii.
OK, dziękuję, ale ja chcesz napisać funkcję, która bierze "licznik" jako parametr, a następnie (w treści funkcji) zwiększa to jak mogę to zrobić? – cheziHoyzer
@cheziHoyzer Zobacz edycję - ale pamiętaj, że podejście funkcjonalne polega na użyciu niezmiennych wartości, więc nie możesz "zwiększyć" zmiennej lokalnej (czy jest to parametr zmienny lub funkcja), chyba że jest zmienna. –
Jeśli nie chcesz korzystać z opcji mutable, nie możesz wykonać niszczącej aktualizacji, takiej jak ++
w języku C#. Możesz śledzić zmienną za pomocą nowej o tej samej nazwie, np.
let x = 4;
let x = x + 1 in (x+4) //returns 8
Chociaż nie można zapisać tego jako funkcji.
EDIT: Jeśli chcesz używać zmiennych Zmienna następnie można utworzyć funkcję, która modyfikuje ref:
let increment (ir: int ref) = ir := !ir + 1
Można następnie użyć go jako
let i = ref 1
increment i
let iv = !i //iv contains 2
Jak Tomas wskazuje w swojej odpowiedź, ta funkcja już istnieje i nazywa się incr
.
OK, dziękuję, ale chcę napisać funkcję, która przyjmuje "count" jako parametr, a następnie (w treści funkcji) ją zwiększa (jeśli używam zmiennego), jak mam to zrobić (kto powinien wyglądać deklaracja funkcji? ?) – cheziHoyzer
Nie można symulować operatora postincrement ale można zrobić preincrement
let inline (+=) (x : byref<_>) y = x <- x + y
let mutable a = 0
&a += 1
lub
let inline incv (x : byref<_>) = x <- x + LanguagePrimitives.GenericOne; x
let mutable b = 0
incv &b
- 1. css przyrost atrybut nth-child wartości
- 2. Ograniczenie wartości F #
- 3. F # Funkcje a wartości
- 4. Przyrost wartości w bazie danych za pomocą Propel
- 5. Przyrost w Lua
- 6. Przyrost liczby w C#
- 7. Przyrost w Android SQLite
- 8. Przyrost kolumny w laravel
- 9. Przyrost bajt []
- 10. Shadowing vs. Ustawianie wartości w F #
- 11. Konwersja wartości na int w F #
- 12. post i pre przyrost, ubytek w C++
- 13. Przyrost z bashem
- 14. F # pętli w F #
- 15. Jak dodać przyrost (1) do wartości elementu z JQuery
- 16. Atomowy przyrost licznika w django
- 17. zmienne przyrost nas w awk
- 18. dla pętli, przyrost o podwójne
- 19. Sublime Text 2 numery przyrost
- 20. funkcja przyrost plsql
- 21. Python słownika przyrost
- 22. Kotlin na odmienny przyrost
- 23. Przyrost PHP o połowę
- 24. F #: Jak wzorzec pasuje do wartości typu?
- 25. Mongoose - Przyrost z findOne
- 26. Przyrost liczbą całkowitą
- 27. XSLT przyrost zmiennej
- 28. F # ciąg - używając tej samej wartości dwukrotnie
- 29. Przyrost działa bardzo dziwnie
- 30. F # przekazywanie do funkcji, uzyskanie wartości null jako wartości parametru
Czy to znaczy 'let fx = x + 1 ' – mbeckish
ale nie mogę używać: count = f count – cheziHoyzer
http://jprajavel.blogspot.nl/2011/11/i-kind-of-functionality-in-f.html Pierwsze trafienie w google dla 'i ++ w F #' –