Τι θα πρέπει να καλέσετε μια συνάρτηση REBOL που κάνει λίστα Η κατανόηση;

ψήφοι
6

REBOL δεν έχει ενσωματωμένο τρόπο για να εκτελέσει λίστα Η κατανόηση. Ωστόσο, REBOL έχει μια ισχυρή εγκατάσταση (γνωστή ως parse) που μπορούν να χρησιμοποιηθούν για τη δημιουργία χώρου-συγκεκριμένες γλώσσες (άδειες DSL). Έχω χρησιμοποιήσει parseγια να δημιουργήσει ένα τέτοιο μίνι-DSL για τη λίστα Η κατανόηση. Για την ερμηνεία της έκφρασης, το μπλοκ που περιέχει την κατανόηση περνά σε μια λειτουργία, η οποία για την έλλειψη ενός καλύτερου όρου που έχω ονομάζεται comprehend.

Παράδειγμα:

comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

Για κάποιο λόγο, comprehendδεν ακούγεται σωστό για μένα, αλλά κάτι τέτοιο evalείναι πολύ γενική.

Δεν έχω βρει καμία άλλη γλώσσα που απαιτεί μια λέξη-κλειδί ή λειτουργία για τη λίστα Η κατανόηση. Είναι καθαρά συντακτική ζάχαρη όπου και αν υπάρχουν. Δυστυχώς δεν έχω αυτή την επιλογή. Έτσι, βλέποντας ότι πρέπει να έχω μια λειτουργία, αυτό είναι ένα καλό, περιεκτικό, λογικό όνομα για αυτό;

Δημοσιεύθηκε 15/10/2008 στις 07:33
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
2

Επειδή λίστα Η κατανόηση μπορεί να θεωρηθεί ως ανάλογη με χάρτη, μπορείτε να σκεφτείτε καλώντας κάτι σαν «ΛίσταΧάρτης». Εναλλακτικά, επειδή κατάλογος Η κατανόηση βασίζονται σε σύνολο-οικοδόμος σημειογραφία, θα μπορούσατε να το ονομάσουμε κάτι προς την κατεύθυνση της «κατασκευής» ή «buildlist».

(Disclaimer: Ξέρω πολύ λίγα για REBOL, οπότε συγχωρέστε με αν έχουν ήδη ληφθεί αυτά τα ονόματα)

Απαντήθηκε 01/02/2009 στις 20:25
πηγή χρήστη

ψήφοι
4

Τι θα λέγατε select;

select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

Απαντήθηκε 01/02/2009 στις 20:44
πηγή χρήστη

ψήφοι
1

doθα μπορούσε να είναι κατάλληλη, καθώς λίστα Η κατανόηση είναι μόνο ένα παράδειγμα της Μονάδας Η κατανόηση, και doείναι η λέξη-κλειδί που χρησιμοποιείται στη Haskell για κουφέτα Μοναδική υπολογισμούς, αλλά υποψιάζομαι ότι είναι πολύ ασαφής για μια βιβλιοθήκη χρήστη. Κάλεσα μου λειτουργία λίστα κατανόηση comp, αλλά αυτό είναι απλά μια συντομογραφία για το τι έχετε ήδη. Ίσως yielding; Π.χ. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Ακριβώς το είδος του στραβισμός και να υποκρινόμαστε το [] δεν υπάρχουν.

Απαντήθηκε 01/02/2009 στις 20:51
πηγή χρήστη

ψήφοι
2

transmogrify

Απαντήθηκε 02/02/2009 στις 00:29
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more