Οκνηρή αποτίμηση

Στη θεωρία των γλωσσών προγραμματισμού, η οκνηρή αποτίμηση (lazy evaluation) ή κλήση κατ' ανάγκη (call-by-need)[1] είναι μια στρατηγική αποτίμησης (evaluation strategy) που καθυστερεί την αποτίμηση μιας έκφρασης μέχρι αυτή να χρειαστεί (μη αυστηρή αποτίμηση, non-strict evaluation) και αποφεύγει επαναλαμβανόμενους υπολογισμούς (μοίρασμα, sharing).[2][3] Το μοίρασμα μπορεί να μειώσει το χρόνο εκτέλεσης συγκεκριμένων συναρτήσεων εκθετικά σε σχέση με άλλες μη αυστηρές στρατηγικές αποτίμησης, όπως η κλήση κατ' όνομα ((call-by-name).

Τα πλεονεκτήματα της οκνηρής αποτίμησης περιλαμβάνουν μεταξύ άλλων: την ελάττωση του χρόνου εκτέλεσης (επειδή αποφεύγονται υπολογισμοί που δε χρειάζονται), λιγότερες εκφράσεις λαθών κατά την αποτίμηση σύνθετων εκφράσεων, τη δυνατότητα κατασκευής δυνητικά άπειρων δομών δεδομένων, και τη δυνατότητα ορισμού των δομών ελέγχου σαν αφαιρέσεις (abstractions), αντί για ενσωματωμένες εντολές. Η οκνηρή αποτίμηση μπορεί να οδηγήσει σε λιγότερη χρήση μνήμης, επειδή οι τιμές δημιουργούνται μόνο όταν χρειάζονται.[4] Η οκνηρή αποτίμηση όμως είναι δύσκολο να συνδυαστεί με προστακτικά χαρακτηριστικά όπως ο χειρισμός εξαιρέσεων και η είσοδος/έξοδος, γιατί δεν είναι εύκολο να προσδιοριστεί η σειρά εκτέλεσης. Επίσης η αποσφαλμάτωση γίνεται πιο δύσκολη.[5]

Το αντίθετο της οκνηρής αποτίμησης είναι η πρόθυμη αποτίμηση (eager evaluation), γνωστή και ως αυστηρή αποτίμηση (strict evaluation). Η αυστηρή αποτίμηση χρησιμοποιείται πιο συχνά στις γλώσσες προγραμματισμού.

Ιστορία

Η οκνηρή αποτίμηση εισήχθηκε στο λ-λογισμό από τον Wadsworth 1971 και στις γλώσσες προγραμματισμού ανεξάρτητα από τους Henderson & Morris 1976 και τους Friedman & Wise 1976.[6]

Εφαρμογές

Η καθυστερημένη αποτίμηση χρησιμοποιείται περισσότερο στις συναρτησιακές γλώσσες. Όταν γίνεται χρήση της καθυστερημένης υλοποίησης, μια έκφραση δεν αποτιμάται όταν δεσμεύεται σε μια μεταβλητή, αλλά όταν πρέπει να βρεθεί η τιμή της έκφρασης. Κατά αυτόν τον τρόπο, μια εντολή όπως η x:=έκφραση; (δηλ. η ανάθεση του αποτελέσματος μιας έκφρασης σε μια μεταβλητή) φαίνεται να ζητά την αποτίμηση της έκφρασης ώστε το αποτέλεσμα να τοποθετηθεί στην x, αλλά τα περιεχόμενα της x δεν έχουν σημασία μέχρι να εμφανιστεί ανάγκη για την τιμή της μέσω κάποιας αναφοράς στην x αργότερα, σε κάποια άλλη έκφραση, η οποία με τη σειρά της μπορεί να καθυστερεί, αν και τελικά το δέντρο των εξαρτήσεων που θα προκύψει θα πρέπει να παράγει κάποιο σύμβολο για τον έξω κόσμο.[7]

Κάποιες γλώσσες προγραμματισμού καθυστερούν πάντα την αποτίμηση των εκφράσεων, ενώ άλλες προσφέρουν συναρτήσεις ή ειδική σύνταξη για την καθυστέρηση της αποτίμησης. Στη Miranda και τη Haskell, οι παράμετροι των συναρτήσεων αποτιμώνται καθυστερημένα. Σε πολλές άλλες γλώσσες, η αποτίμηση μπορεί να καθυστερήσει σταματώντας ρητά τον υπολογισμό, με χρήση ειδικής σύνταξης (όπως οι "delay" και "force" της Scheme και οι "lazy" και "Lazy.force" της OCaml) ή γενικότερα με το πακετάρισμα της έκφρασης σε ένα thunk (καθυστερημένος υπολογισμός). Το αντικείμενο που αναπαριστά μια ρητα καθυστερημένη αποτίμηση ονομάζεται μέλλον (future) ή υπόσχεση (promise). Η Perl 6 χρησιμοποιεί οκνηρή αποτίμηση στις λίστες: ο προγραμματιστής μπορεί να αναθέσει άπειρες λίστες σε μεταβλητές και να τις περάσει σε συναρτήσεις, αλλά, σε αντίθεση με τη Haskell και τη Miranda, η Perl 6 δεν χρησιμοποιεί οκνηρή αποτίμηση από προεπιλογή στους αριθμητικούς τελεστές και στις συναρτήσεις.[7]

Η καθυστερημένη αποτίμηση έχει το πλεονέκτημα ότι μπορεί να δημιουργήσει υπολογίσιμες άπειρες λίστες χωρίς άπειρους βρόχους ή άλλα προβλήματα μεγέθους στον υπολογισμό. Για παράδειγμα, μπορεί να δημιουργηθεί μια συνάρτηση που δημιουργεί μια άπειρη λίστα (η οποία λίστα συχνά αποκαλείται ροή, αγγλ.stream) από αριθμούς Φιμπονάτσι. Ο υπολογισμός του ν-οστού αριθμού Φιμπονάτσι είναι απλά η εξαγωγή αυτού του στοιχείου από την άπειρη λίστα, που προκαλεί την αποτίμηση μόνο των πρώτων ν στοιχείων της λίστας.[8][9]

Για παράδειγμα, στη Haskell, η λίστα όλων των αριθμών Φιμπονάτσι μπορεί να γραφτεί ως εξής:[9]

 fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

Στη σύνταξη της Haskell, ο τελεστής ":" προσθέτει ένα στοιχείο στην αρχή της λίστας, η συνάρτηση tail επιστρεφει μια λίστα χωρίς το πρώτο της στοιχείο και η zipWith χρησιμοποιεί κάποια συνάρτηση (εδώ την πρόσθεση) για να συνδυάσει ένα-προς-ένα τα στοιχεία από δύο λίστες για να δημιουργήσει μια τρίτη.[8]

Αν ο προγραμματιστής είναι προσεκτικός, μπορούν να αποτιμηθούν μόνο οι τιμές που χρειάζονται για να παράγουν ένα συγκεκριμένο αποτέλεσμα. Όμως, κάποιοι υπολογισμοί μπορεί να έχουν σαν αποτέλεσμα το πρόγραμμα να προσπαθήσει να αποτιμήσει έναν άπειρο αριθμό από στοιχεία -- για παράδειγμα, όταν ζητείται το μήκος ή το συνολικό άθροισμα των στοιχείων μιας λίστας με μια λειτουργία fold, που μπορεί να κάνει το πρόγραμμα να εκτελείται επ' άπειρον ή να καταναλώσει όλη τη μνήμη.

Δομές ελέγχου

Η εντολή if είναι πάντα οκνηρή, ακόμα και στις κοινές (πρόθυμες) γλώσσες. Η έκφραση

if a then b else c

υπολογίζει την υποέκφραση (a) και μετά, αν και μόνο αν η (a) είναι αληθής, υπολογίζει την (b), αλλιώς υπολογίζει την (c). Δηλαδή, κάποια από τις (b) και (c) δε θα υπολογιστεί. Αντίθετα, σε μια πρόθυμη γλώσσα ο παρακάτω κώδικας

define f(x,y) = 2*x
set k = f(e,5)

αναμένεται να υπολογίσει την (e) και την (f) όταν υπολογίζει την (k). Όμως, οι δομές ελέγχου (control structures) που ορίζονται από το χρήστη βασίζονται στη σύνταξη της γλώσσας και στο παράδειγμα

define g(a,b,c) = if a then b else c
l = g(h,i,j)

και η (i) και η (j) θα υπολογιστούν σε μια οκνηρή γλώσσα. Αντίθετα, στον κώδικα

l' = if h then i else j

θα υπολογιστεί η (i) ή η (j), αλλά ποτέ και οι δύο.

Η οκνηρή αποτίμηση επιτρέπει τον ορισμό δομών ελέγχου από το χρήστη, χωρίς να απαιτούνται ειδικές βασικές εντολές (primitives) ή τεχνικές του χρόνου μεταγλώττισης (compile-time). Αν η (i) ή η (j) έχει παρενέργειες (side effects), ή εισάγει σφάλματα χρόνου εκτέλεσης (run time errors), η συμπεριφορά της έκφρασης μπορεί να είναι πολύπλοκη. Επειδή οι περισσότερες γλώσσες προγραμματισμού είναι Τούρινγκ-πλήρεις (Turing-complete), μπορούν να γραφτούν από το χρήστη οκνηρές δομές ελέγχου σε πρόθυμες γλώσσες, σαν συναρτήσεις, αλλά τότε δεν ακολουθούν τη σύνταξη της γλώσσας για πρόθυμη αποτίμηση: συχνά οι υποεκφράσεις (όπως η (i) και η (j)) πρέπει να πακετάρονται σαν συναρτήσεις, ώστε να εκτελούνται μόνο όταν καλούνται.

Η βραχυκυκλωμένη αποτίμηση (short-circuit evaluation) των δομών ελέγχου αληθείας, όπως οι τελεστές && και || της C, συχνά καλείται επίσης "οκνηρή" ("lazy").

Άλλες χρήσεις

Στα παραθυρικά περιβάλλοντα (windowing systems) των υπολογιστών, η εμφάνιση γραφικής πληροφορίας στην οθόνη οδηγείται από "γεγονότα έκθεσης" ("expose events") που ενεργοποιούν τον κώδικα εμφάνισης την τελευταία στιγμή. Με αυτόν τον τρόπο, αποφεύγεται ο υπολογισμός περιεχομένου που δεν χρειάζεται.[10]

Ένα άλλο παράδειγμα οκνηρίας (laziness) στους υπολογιστές είναι δέσμευση σελίδων μνήμης με την τεχνική αντιγραφή-όταν-γράφεται (copy-on-write) ή demand paging, όπου η μνήμη δεσμεύεται μόνο όταν η τιμή που αποθηκεύεται σε αυτήν τη θέση αλλάζει.[10]

Η οκνηρία μπορεί να είναι χρήσιμη σε περιπτώσεις υψηλής απόδοσης. Ένα παράδειγμα είναι η λειτουργία της κλήσης mmap του Unix. Η mmap φορτώνει σελίδες από το δίσκο με βάση τη ζήτηση ("demand driven"), ώστε να φορτώνονται μόνο οι σελίδες που χρειάζονται πραγματικά και να μην δεσμεύεται μνήμη που δε χρειάζεται.

Πρόθυμη αποτίμηση και οκνηρές γλώσσες

Σε οκνηρές γλώσσες προγραμματισμού όπως η Haskell, αν και εξ ορισμού οι εκφράσεις αποτιμώνται μόνο όταν χρειάζονται, κάποιες φορές είναι απαραίτητη η πρόθυμη αποτίμηση. Αυτό μπορεί να γίνει κωδικοποιώντας κάτι ρητά ώστε να προκαλεί αποτίμηση. Η αυστηρή αποτίμηση (strict evaluation) συνήθως υλοποιείται μέσω της πρόθυμης υλοποίησης, αλλά δεν ταυτίζονται.

Παρόλα αυτά, υπάρχει μια βελτιστοποίηση σε κάποιους μεταγλωττιστές που ονομάζεται ανάλυση αυστηρότητας (strictness analysis), η οποία σε κάποιες περιπτώσεις επιτρέπει στο μεταγλωττιστή να βρει αν μια τιμή θα χρειάζεται πάντα. Σε αυτές τις περιπτώσεις ο μεταγλωττιστής επιβάλλει την αυστηρή αποτίμηση.

Στη Haskell, η σημείωση πεδίων κατασκευαστών (constructor fields) σαν πρόθυμα, σημαίνει ότι οι τιμές τους θα χρειαστούν κατευθείαν. Η συνάρτηση seq μπορεί επίσης να χρησιμοποιηθεί για να ζητηθεί μια τιμή άμεσα και στη συνέχεια να δοθεί σε μια άλη έκφραση, που είναι χρήσιμη αν κάποιο πεδίο κατασκευαστή είναι οκνηρό. Όμως καμία από αυτές τις τεχνικές δεν υοποιεί αναδρομική αυστηρότητα -- για αυτήν την περίπτωση χρειάζεται η ειδική συνάρτηση deepSeq.

Επίσης, το ταίριασμα προτύπων (pattern matching) στην Haskell 98 είναι εξ ορισμού αυστηρό, εκτός και αν χρησιμοποιηθεί το σύμβολο ~ που το κάνει οκνηρό.

Δείτε επίσης

Σημειώσεις

  1. Hudak 1989, σελ. 384
  2. David Anthony Watt· William Findlay (2004). Programming language design concepts. John Wiley and Sons. σελίδες 367–368. ISBN 9780470853207. Ανακτήθηκε στις 30 Δεκεμβρίου 2010. 
  3. Reynolds 1998, σελ. 307
  4. Chris Smith (22 Οκτωβρίου 2009). Programming F#. O'Reilly Media, Inc. σελ. 79. ISBN 9780596153649. Ανακτήθηκε στις 31 Δεκεμβρίου 2010. 
  5. «OCaml and lazy evaluation». Αρχειοθετήθηκε από το πρωτότυπο στις 28 Ιουνίου 2011. Ανακτήθηκε στις 28 Ιουνίου 2011. 
  6. Reynolds 1998, σελ. 312
  7. 7,0 7,1 Philip Wadler (2006). Functional and logic programming: 8th international symposium, FLOPS 2006, Fuji-Susono, Japan, April 24-26, 2006 : proceedings. Springer. σελ. 149. ISBN 9783540334385. Ανακτήθηκε στις 14 Ιανουαρίου 2011. 
  8. 8,0 8,1 Daniel Le Métayer (2002). Programming languages and systems: 11th European Symposium on Programming, ESOP 2002, held as part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2002, Grenoble, France, April 8-12, 2002 : proceedings. Springer. σελίδες 129–132. ISBN 9783540433637. Ανακτήθηκε στις 14 Ιανουαρίου 2011. 
  9. 9,0 9,1 Association for Computing Machinery· ACM Special Interest Group on Programming Languages (1 Ιανουαρίου 2002). Proceedings of the 2002 ACM SIGPLAN Haskell Workshop (Haskell '02) : Pittsburgh, Pennsylvania, USA ; October 3, 2002. Association for Computing Machinery. σελ. 40. ISBN 9781581136050. Ανακτήθηκε στις 14 Ιανουαρίου 2011. 
  10. 10,0 10,1 Lazy and Speculative Execution Αρχειοθετήθηκε 2012-10-10 στο Wayback Machine. Butler Lampson, Microsoft Research OPODIS, Bordeaux, France 12 December 2006

Αναφορές

Βιβλιογραφία

Design patterns
Blog posts by computer scientists

Εξωτερικοί σύνδεσμοι

Read other articles:

川崎重工業 > 川崎車両 > アルナ輸送機用品 アルナ輸送機用品株式会社種類 株式会社市場情報 非上場略称 ALNA本社所在地 日本〒503-1241岐阜県養老郡養老町沢田665番地2設立 2002年(平成14年)4月1日業種 輸送用機器法人番号 7200001015805事業内容 乗物用窓枠およびドア、バス停留所標識などの製造代表者 代表取締役社長 井上 和也資本金 1億円純利益 400万円(2023...

 

Italian actor Sandro RuffiniBornAlessandro Ruffini(1889-09-21)21 September 1889Rome, ItalyDied29 November 1954(1954-11-29) (aged 65)Rome, ItalyOccupation(s)Actor, voice actorYears active1913–1954 Alessandro Sandro Ruffini (21 September 1889 – 29 November 1954) was an Italian actor and voice actor.[1] Born in Rome, Ruffini appeared in 64 films between 1913 and 1954, and was also active in theatre and radio. He was well known for his beautiful aristocratic voice and dubbed...

 

Brazilian streamer AlanzokaAlanzoka in September 2021Personal informationBornAlan Ferreira Pereira (1990-05-13) 13 May 1990 (age 33)São Paulo, BrazilOther namesNextage[1]PartnerMaethe Pauferro (2012–present)Twitch informationChannel alanzoka Years active2011–presentGenreGamingGames Counter Strike: Global Offensive Rocket League Fortnite Valorant Followers6.4 millionContents are inPortugueseYouTube informationChannels alanzoka Lives do alanzoka Years activ...

Координати: 38°42′39″ пн. ш. 9°08′23″ зх. д. / 38.7109722° пн. ш. 9.13972° зх. д. / 38.7109722; -9.13972 Baixa-Chiado Лісабонський метрополітен Загальні даніТип односклепінна глибокого закладення з кросплатформовою пересадкоюКількість 3Тип 1 острівна и 2 береговіФорма

 

Para otros usos de este término, véase Pablo Caballero. Pablo Caballero Datos personalesNombre completo Pablo Nicolás CaballeroApodo(s) PaliNacimiento Totoras, Santa Fe, Argentina21 de julio de 1986 (37 años)Nacionalidad(es) ArgentinaEspañolaAltura 1,91 metrosCarrera deportivaDeporte FútbolClub profesionalDebut deportivo 2007(Racing Club)Club Real Club Recreativo de HuelvaLiga Segunda FederaciónPosición Delantero[editar datos en Wikidata] Pablo Caballero (Totoras, ...

 

Sumitra Duangkaew Sumitra Duangkaew (lahir 28 Juni 1996) adalah pemeran dan penyanyi asal Thailand. Pada 2018, ia memulai karirnya sebagai anggota BNK48 generasi kedua. Pada 2019, ia tampil dalam film Where We Belong. Pada 2020, ia memainkan peran utama dalam film One Take dan The Underclass. Pada tahun 2022, ia tampil dalam drama Something in My Room sebagai Dream.[1] Referensi ^ Mengenal Faii Sumitta Duangkaew, Indigo di Something in My Room. Baper Mulu.  Artikel bertopik biogr...

Belgian racing cyclist Gijs Van HoeckeVan Hoecke in 2023Personal informationBorn (1991-11-12) 12 November 1991 (age 32)Ghent, BelgiumHeight186 cm (6 ft 1 in)Weight75 kg (165 lb)Team informationCurrent teamHuman Powered HealthDisciplinesRoadTrackRoleRiderAmateur teams2010Beveren 20002011Omega Pharma–Lotto Davo Professional teams2012–2016Topsport Vlaanderen–Mercator2017–2018LottoNL–Jumbo2019–2020CCC Team[1]2021–2022AG2R Citroën Team[...

 

Triomf van de dood (De geraamten spelen ten dans) Kunstenaar Felix Nussbaum Jaar 1944 Techniek olieverf op doek Afmetingen 100 × 150 cm Museum Felix-Nussbaum-Haus Locatie Osnabrück Portaal    Kunst & Cultuur Felix Nussbaum, Orgeldraaier (1942-43) Bruegels Triomf van de dood (1562) Triomf van de dood, ook wel De geraamten spelen ten dans, is het laatste olieverfschilderij van de Duitse Jood Felix Nussbaum. Hij voltooide het op 18 april 1944, twee maanden vóór hij gearres...

 

2003 Basildon District Council election[1][2][3] ← 2002 1 May 2003 2004 → 14 of the 42 seats to Basildon District Council22 seats needed for a majority   First party Second party Third party   Party Conservative Labour Liberal Democrats Last election 21 18 3 Seats before 21 16 3 Seats won 8 5 1 Seats after 23 14 3 Seat change 2 4 1 Popular vote 12,090 7,441 5,255 Percentage 45.3% 27.9% 19.7%   Fourth pa...

German footballer Florian Ballas Ballas with Dynamo Dresden in 2019Personal informationDate of birth (1993-01-08) 8 January 1993 (age 30)Place of birth Saarbrücken, GermanyHeight 1.96 m (6 ft 5 in)Position(s) Centre-backTeam informationCurrent team Jahn RegensburgNumber 4Youth career1996–2003 SV Scheidt1993–2009 1. FC Saarbrücken2009–2010 1. FC Nürnberg2010–2011 1. FC SaarbrückenSenior career*Years Team Apps (Gls)2011–2013 1. FC Nürnberg II 40 (2)2013–2015...

 

Osbaldo Lastra Nazionalità  Ecuador Altezza 179 cm Calcio Ruolo Centrocampista Squadra  Emelec Carriera Squadre di club1 2001-2002 Atlético Jubones? (?)2002-2003→  Audaz Octubrino? (?)2003-2005 Deportivo Quito? (?)2005-2006→  Audaz Octubrino? (?)2006-2007 Deportivo Quito0 (0)2007-2008 Aucas23+ (1+)2008 Universitario? (?)2009-2011 Deportivo Azogues26 (5)2011-2012 Macará61 (3)2013- Emelec119 (4) Nazionale 2015 Ecuador6 (0) 1 I due nu...

 

American football player, coach, and executive (1919–2008) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Mike Holovak – news · newspapers · books · scholar · JSTOR (April 2008) (Learn how and when to remove this template message) American football player Mike HolovakNo. 45, 15Position:FullbackPersonal in...

Men's Greco-Roman 52 kgat the Games of the XIX OlympiadVenueInsurgentes Ice RinkDates23–26 OctoberCompetitors24 from 24 nationsMedalists Petar Kirov  Bulgaria Vladimir Bakulin  Soviet Union Miroslav Zeman  Czechoslovakia← 19641972 → Wrestling at the1968 Summer OlympicsFreestyleFlyweightmenBantamweightmenFeatherweightmenLightweightmenWelterweightmenMiddleweightmenLight heavyweightmenHeavyweightmenGreco-RomanFlyweightmenBantamweightmenFeatherweig...

 

Austronesian language spoken in Vanuatu Big NambasV'ənen TautPronunciation[ˈθ̼ənɛn tautʰ]Native toVanuatuRegionNorthwest MalekulaNative speakers3,400 (2001)[1]Language familyAustronesian Malayo-PolynesianOceanicSouthern OceanicCentral VanuatuMalakulaWesternBig NambasWriting systemLatin scriptLanguage codesISO 639-3nmbGlottologbign1238Big Nambas is not endangered according to the classification system of the UNESCO Atlas of the World's Languages in DangerThis article c...

 

Ilario Altobelli Ilario Altobelli (Treia, 1560 – Treia, 31 ottobre 1637) è stato un astronomo e religioso italiano. Indice 1 Biografia 2 Opere 3 Bibliografia 4 Altri progetti 5 Collegamenti esterni Biografia Nacque a Montecchio, ora Treia, nelle Marche, nell'estate del 1560 e il 29 maggio 1575 vestì il saio di frate minore conventuale. Ordinato sacerdote nel 1585, dal 1587 studiò a Roma nel Collegio di San Bonaventura e si laureò in teologia l'8 dicembre 1591 nel capitolo provinciale di...

Questa voce sull'argomento Stagioni delle società calcistiche italiane è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Associazione Sportiva Dilettantistica Imperia. Unione Sportiva ImperiaStagione 1981-1982Sport calcio Squadra Imperia Allenatore Giovanni Sacco Presidente Franco Lanteri Serie C212º posto nel girone A. Maggiori presenzeCampionato: Pionetti (32) Miglior marcatoreCa...

 

Statutory board in Singapore This article relies excessively on references to primary sources. Please improve this article by adding secondary or tertiary sources. Find sources: Singapore Land Authority – news · newspapers · books · scholar · JSTOR (November 2007) (Learn how and when to remove this template message) Singapore Land AuthorityAgency overviewFormed1 June 2001; 22 years ago (2001-06-01)Preceding agencyLand Office, Singapor...

 

Jalur trem Karawang-RengasdengklokIkhtisarJenisJalur trem lintas cabangSistemJalur tremStatusTidak BeroperasiLokasiJawa BaratTerminusKarawangRengasdegklokStasiun10OperasiDibuka15 Juni 1919Ditutup1972-1984PemilikDirektorat Jenderal PerkeretaapianOperatorPT Kereta Api Indonesia Daerah Operasi I JakartaKarakteristik lintasLintas datarData teknisPanjang lintas36 km Peta rute Legenda ke Cikampek,Cirebon ke Jatinegara RJW-CKP KW Karawang KWTR Karawang Trem CNA Cinango LMR Lamaran ke Wadas,Cik...

此條目可参照英語維基百科相應條目来扩充。 (2023年5月27日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 玛丽·艾丽斯Mary Alice攝於1993年第45屆艾美獎州長舞會出生Mary Alice Smith(1936-12-03)1936年12月3日[1] 美国...

 

This is a list of lightvessels which operate or operated on various lightvessel stations in England, Scotland and Wales. Trinity House lightvessels The central records of the lightvessels operated by Trinity House were lost when Trinity House was bombed in 1940. Name LV number Image Entered service Shipbuilder & yard no. Stations served on Decommis­sioned Notes Mary Mouse 2 11946Philip and Son1993In 1993 she was decommissioned and sold to Dean & Reddyhoff Ltd., Southampton,...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!