Διαδρομές
/
Unison
Unison
/
Ασκήσεις
/
Λειτουργίες Stream
Λειτουργίες Stream

Λειτουργίες Stream

Μέτριο

Οδηγίες

Υλοποίησε βασικές λειτουργίες της ικανότητας Stream.

Στις συναρτησιακές γλώσσες, συναρτήσεις όπως οι filter, map και reduce είναι πολύ συνηθισμένες. Υλοποίησε μια σειρά από βασικούς συναρτησιακούς συνδυαστές για μια ικανότητα ροής, χωρίς να χρησιμοποιήσεις υπάρχουσες συναρτήσεις. Θα χρειαστεί να γράψεις τους δικούς σου διαχειριστές ικανοτήτων για αυτό.

💡 Θα ονομάσουμε αυτή την ικανότητα MyStream για να αποφύγουμε τη σύγκρουση με την υπάρχουσα ικανότητα Stream στην τυπική βιβλιοθήκη.

Οι λειτουργίες που θα χρειαστεί να υλοποιήσεις είναι:

  • MyStream.fromList (δεδομένης μιας λίστας στοιχείων, δημιούργησε μια ροή στοιχείων)
  • MyStream.toList (δεδομένης μιας ροής στοιχείων, μετέτρεψέ την σε λίστα)
  • MyStream.toListWithResult (δεδομένης μιας ροής στοιχείων, μετέτρεψέ την σε λίστα μαζί με το αποτέλεσμα της συνάρτησης ροής)
  • MyStream.ignore (δεδομένης μιας ροής στοιχείων, αγνόησε τις τιμές που εκπέμπονται και επέστρεψε τα αποτελέσματα της συνάρτησης ροής)
  • MyStream.filter (δεδομένου ενός κατηγορήματος και ενός MyStream, επέστρεψε το MyStream με όλα τα στοιχεία για τα οποία το predicate(item) είναι αληθές)
  • MyStream.map (δεδομένης μιας συνάρτησης και ενός MyStream, επέστρεψε το MyStream με τα αποτελέσματα της εφαρμογής του function(item) σε όλα τα στοιχεία)
  • MyStream.flatMap (δεδομένης μιας συνάρτησης που παράγει ένα MyStream και ενός MyStream, επέστρεψε το MyStream με τα αποτελέσματα της εφαρμογής του function(item) σε όλα τα στοιχεία)

Σχετικά με την ικανότητα Stream

Το Stream είναι μια ικανότητα που διαθέτει η Unison και χρησιμοποιείται για να εκπέμπει τιμές.

Μπορεί να χρησιμοποιήσεις την ικανότητα Stream αν έχεις μια συνάρτηση που θα πρέπει να παράγει τιμές ως δευτερεύουσα παρενέργεια καθώς καλείται. Για παράδειγμα, αυτή η συνάρτηση επιστρέφει την τελευταία τιμή της λίστας, αλλά εκπέμπει ένα τρέχον άθροισμα καθώς συναντά κάθε στοιχείο:

emitRunningTotal : '{Stream Nat} Nat
emitRunningTotal = 'let
  use Nat +
  List.foldLeft (
    acc a -> let
      runningTotal = acc + a
      Stream.emit runningTotal
      a
    ) 0 [1,2,3,4,5]

Μπορούμε να υλοποιήσουμε το Stream ως λίστα μαζί με την τιμή επιστροφής της συνάρτησης που το παράγει, με έναν χειριστή ικανοτήτων:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
Unison Exercism

Έτοιμος να ξεκινήσεις την άσκηση Λειτουργίες Stream;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις Unison με 53 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.