Lingua::Romana::Perligata
Tio estas projekto de traduko de la paĝo Lingua::Romana::Perligata -- Perl for the XXI-imum Century far Damian Conway. Tio paĝo nur tradukas la Angla parto al Esperanto. Alia projekto povos adapti ĝin al Esperanta programlingvo.
Resumo
editTiu teksto priskribas Perl-a modulo – Lingua::Romana::Perligata – kiu ebligas skribi Perl-ajn programojn latine. Eblaj bazaj ideoj, kiuj eksplikas la kialon de tiela volo, estas provizita kune kun plena superrigardo pri la sintakso kaj semantiko de latinigita Perl. La teksto egale eksplikas la necesajn specialajn font-filtradajn kaj sintaksanalizadajn teknikojn por efike interpreti programlingvon, kies sintakso estas (plejparte) malpozicia.
Enkonduko
editKompare kun aliaj lingvoj (ambaŭ modernaj kaj praaj), Angla havas malforta leksik-strukturon. En Angla frazo, plejparte ol gramatika ŝarĝo estas portita per poziciaj indikiloj. Ordono kiel "The boy gave the dog the food" (La knabo donis al la hundo la manĝaĵon) nur havas senson pro konvencio, kie subjekto antaŭas la verbon, kiu antaŭas la nerektan objekton, kiu antaŭas la rektan objekton. Ŝanĝi la ordo – "The food gave the boy the dog" – ŝanĝas la signifon (La manĝaĵo donis al la knabo la hundon).
Plejparte programlingvoj uzas similajn poziciajn gramatikajn indikiloj.
La operacio $maximum = $next
(maksimumo iĝu sekvanto) ege malsamsignifas ol $next = $maximum
(sekvanto iĝu maksimumo).
Same, la funkci-vokado push @my_assets, @your_money
malsamas ol push @your_money, @my_assets
.
Generally speaking, older natural languages have richer lexical structures
(such as inflexions for noun number and case) and therefore rely less on
word order. For example, in Latin the statements Puer dedit cani escam
and
Escam dedit puer cani both mean ``The boy gave the dog the food.
Indeed, the more usual word order would be reverse Polish, with the verb
coming last: Puer cani escam dedit.
Ĝeneraldire, praaj lingvoj havas pli riĉa leksik-strukturojn (kiel infleksio por nom- nombro kaj kazo), kaj pro tio malpli apogas sur vortordo. Ekzemple, la latinaj ordonoj "Puer dedit cani escam" kaj "Escam dedit puer cani" ambaŭ signifas "La knabo donis al la hundo la manĝaĵon". Fakte, la plej kutima vortordo estus la inversa pola, kie la verbo aperas laste: "Puer cani escam dedit".
This flexibility is possible because Latin uses inflexion, not position,
to denote lexical roles. The lack of a suffix denotes that the boy (puer)
is the subject; the -i ending indicates that the dog (cani)
is the indirect object; whilst the -am ending indicates that the
food (escam) is the direct object.
Tiu fleksebleco estas ebla ĉar Latina uzas infleksion, ne pozicion, por indiki leksikan rolon. La sensufiksado indikas ke "puer" (knabo) estas la subjekto; la -i finaĵo indikas ke "cani" (hundo) estas la nerekta objekto; kvankam la -am finaĵo indikas ke "escam" estas la rekta objekto.
Por diri "The food gave the boy the dog" (La manĝaĵo donis al la knabo la hundon), oni povus skribi "Puero canem esca dedit". Tie, la -o finaĵo indikas ke la knabo nun estas la nerekta objekto, la finanta -em indikas ke la hundo devenis la rekta objekto, kvankam la -a finaĵo indikas ke la manĝaĵo estas la subjekto.
Iu malpli pozicia programlingvo
editEstas neniu racio pro ne uzi infleksion en programlingvoj anstataŭ pozicio por indiki leksikarolo. Perl’ jam uzas tiun ideon per necesado de malsamaj prefiksoj por indiki malsamantaj tipoj de leksemoj: $ por indiki skalaron, @ por indiki vico, & por indiki proceduro, ktp.
Fakte, nenial estas ke prafunkcioj, kiel bless
aŭ inga formo de map
,
aŭ êc push
,
ne povus ebli specifadon de iliajn argumentojn laŭ iu ajn ordo,
almenaŭ kiam prefiksoj (aŭ ĝiaj mankoj) indikas neambigue la rolon por ĉiu argumento.
my $obj = bless 'Classname', \%obj;
@squares = map @numbers {$_**2};
push ('Moe', 'Larry', 'Curly') => @stooges;
Plie, pro la funkcinomoj si mem estas neambiguaj laŭ iliaj roloj, nenial nepras, ke ankaŭ iliaj pozicioj estas fiksita:
@squares = @numbers map {$_**2};
('Moe', 'Larry', 'Curly') => @stooges push;
Perl’ jam permesas ete tielan flekciecon per formo de ordonaj modifiloj :
if ($next > $max) { $max = $next }
# ...estas la sama ol...
$max = $next if $next > $max;
Tiu teksto priskribas novan modulon – Lingua::Romana::Perligata –, kiu esploras alivojan sintaksligon por Perl’, per infleksioj apogitaj laŭ klasika latina gramatiko. Tiuj infleksioj antataŭigas funkciojn de normaj Perl-aj $/@/%/& prefiksoj kaj apogas la novan koncepton de semantika rolo, kiu eblas multe pli da libereco en la specifado de funkcioj, operacioj, kaj ilaj respektivaj argumentoj.
Semantikaj roloj
editPlejparte el Perl-a riĉa varieco de operatoj provizas asignadan taksujon:
+=
por +
,
.=
por .
,
||=
por ||
,
ktp.
Tiele, proksime duono el Perl-aj operatoroj produktas iun ŝanĝon por unu aŭ pli el iliaj argumentoj.
Same, multe el Perl-a prafunkcioj ( push, pop, open
, ktp.) modifas iun el iliaj argumentoj.
Ambaŭkaze, la modif-nepra operacianto aŭ argumento estas indikita pozicie
– estas ĉiam la antaŭa operaciato aŭ la unua argumento. Plie, tiu argumento
estas ĉiam implicite enreferencita, kiel se ĝi havus \$ aŭ \@ prototipo.
Tiele, operaciatoj kaj argumentoj havas unu el du la semantikaj roloj: celo aŭ dateno. Iu celo estas provizita per referenco, kaj estas modifita dum la taksado de operacio aŭ funkcio. Dateno estas provizita per taksigo (kvankam tiu taksigo mem povas esti iu refereco) kaj ili kontrolas aŭ "hejtas" la modifo de la celo.
In this model, it is possible to recast almost all built-in Perl functions
and operations as procedures of exactly two arguments: a single reference
(the target) and a single list (the data):
Laŭ tiel modelo, estas ebla etranstipi kvazaŭ ĉiuj pra-Perl-aj funkcioj kaj operacioj kiel proceduro kun ekzakte du argumentoj: iu unuopa referenco (la celo) kaj unu unuopa listo (la dateno):
_sysopen( -target=>\*FILE, -data=>[$filename,$mode,$perms] );
_push( -target=>\@stooges, -data=>['Moe', 'Larry', 'Curly'] );
_pop( -target=>\@stack, -data=>[] );
_assign( -target=>\$max, -data=>[$nextval] )
if _num_less_than( -target=>undef, -data=>[$max, $nextval] );
_assign( -target=>\$now, -data=>[ _time(-target=>undef, -data=>[]) ]);
Note that, for many functions, either or both of these two standard arguments may be null.
Notu ke por multaj da funkcioj, ajna el la du normaj argumentoj – posible ambaŭ – povas esti sentaksiga.
Mapado de la modelo al Latino
editPor mapi tiun simpligitan modelon de Perl’ al iu infleksia sintakso, estas nepre elekti infleksan skemon, kiu diferencigas la tri komponantojn el ĉiu funkcio: nomo, celo kaj dateno.
Pri la temo de la ekzemplo
Ekzemploj de tiu sekcio kaj aliaj ekzemploj pliposte aludas pri la filmo Il buono, il brutto, il cattivo., esperante: La bonulo, la aĉulo, la fiulo.
Konsideru la asignadon de listo al vico:
@gunslingers = ( @good, @bad, $Ugly );
Laŭ notacio de semantika rolo, tio estas:
_assign( -target=>\@gunslingers, -data=>[@good, @bad, $Ugly] );
# laŭvorte _asignu( -celo=>\@pafuloj, -dateno=>[@bonulo, @aĉulo, $Fiulo] );
Anglige, tio estus esprimita:
- Assign gunslingers goodies and baddies and Mr Ugly.
Esperante, tio estus esprimita:
- Asignu al pafiluloj bonularon kaj aĉularon kaj fiulon
The imperative verb ``assign specifies the action to be performed. The
noun ``gunslingers specifies the indirect (or dative) object of the action.
In other words, it is the recipient of the effect of the action -- the
target. The phrase ``goodies and baddies and uglies specifies the direct
object of the action -- that which is to be assigned. In other words, the
data. The direct and indirect objects are only distinguished by the order
in which they appear: indirect object first.
La imperativa verbo assign (volitiva verbo asignu en Esperanto) specifas la efektivigan agon. La nomo gunslingers (pafiluloj) specifas la nerekta (aŭ dativa[noto 1]) objekto de la ago. Alivortige, ĝi estas la ricevonto de la efektivigo de la ago – la celo. La frazparto goodies and baddies and uglies specifas la rekta objekto de la ago – tiu, kiu estas asignota. Alivorte, la dateno. La rektaj kaj nerektaj objektoj estas diferencigita nur per eldirordo: la nerekta objekto antaŭ la rekta.
La Angla versio ankaŭ uzas la pluralan infleksion por goodies kaj
baddies, tre simile al Perl-a uzado de la prefikso @ por indiki
la oblecon de implikitaj objectoj[noto 2].
Latine, la samaj instrukcioj estus (loze) vortigita:
- Bonos tum malos tum Foedum pugnatoribus da.
Tie, la rektaj objektoj estas bonos ("la bon(ul)ojn", akuzativa pluralo), malos ("la aĉ(ul)ojn", akuzativa pluralo) kaj Foedum ("fiulo", akuzativa singularo). La nedirekta objeto estas pugnatoribus ("al batalantoj", dativa pluralo) kaj la verbo estas da ("donu", prezenca imperativo). La konjunkcio tum signifas kaj tiam/tiame, kaj transdonas la signifon de la ordo de la rektaj objektoj.
Malsame al la Angla -s finaĵo, la diversa latina sufiksoj (-os, -um, -ibus) specifas ambaŭ la nombro kaj la rolo (aŭ kazo) de la inflekcita nomo. Tio signifas ke la pozicio de la diversaj objektoj, kaj fakte de la verbo mem, ne gravas. La sama frazo povus egale esti eldirita:
- Pugnatoribus da bonos tum malos tum Foedum.
aŭ Da bonos tum malos tum Foedum pugnatoribus.
Semantike, ĉiuj el tiuj variaĵoj (kaj ajn aliaj permutaĵoj de la verbo kaj ĝiaj objektoj) estas ekvivalentaj al la sama modelo pri celo/dateno:
_assign( -target=>\@gunslingers, -data=>[@good, @bad, $Ugly] );
kaj sekve estas ekvivalentaj aj la norma Perl’:
@gunslingers = ( @good, @bad, $Ugly );
Tiel estas ebla skribi Perl-programoj Latine.
Lingua::Romana::Perligata
editThe Lingua::Romana::Perligata module provides the necessary translation services to allow Perl programs to be written using a syntactic binding (perligatus) modelled on the ancient lingua Romana. To distinguish it from regular Perl, this binding -- and any code specified in it -- is henceforth referred to as ``Perligata.
La Lingua::Romana::Perligata modulo provizas necesaj tradukilaj servoj por ebli skribadon de Perl-programoj per sintaksa bindado (perligatus), modelita laŭ la praa lingua Romana. Por diferencigi ĝin el la regula Perl’, tiu bindo – kaj ajna kodo specifita en ĝi – estas nun referencita kiel Perligata.
Variantoj
editPor simpligi la kompleksegajn regulojn de deklinacio kaj konjugacio, kiuj rulas infleksiojn en Latino, Perligata traktas ĉiujn uzant-difinitajn skalarajn kaj vicajn taksujojn kiel neŭtraj subsantivoj de dua deklinacio – singularoo por skalaroj, pluraloo por vicoj. Tiu etigas la nombron da memorendaj sufiksoj.
Haktabeloj kreas malfacilecon en Perligata, ĉar al Latino mankas evidentan manieron por diferencigi tiujn "pluraloajn" taksujojn el vicoj. La solvo adoptita estas foriri de la dua deklinacio kaj reprezenti haktabelojn kiel viraj substantivoj el la kvara deklinacio.
Sekve, la tipo kaj rolo de ĉiuj tipaj taksujoj estas specifita per ilia nombro kaj kazo, kiel indiktia en Tabelo 1.
Kiam eroj de vicoj kaj haktabeloj estas referencita rekte en Perl’, la prefikso de la enhavanto ŝanĝas de @ aŭ % al $. Do malsurprize Perligata ankaŭ uzas malsamajn infleksiojn por diferencigi tiujn kazojn.
Indecadaj operacioj kiel $array[$elem]
(laŭvorte $vico[$ero]
) aŭ $hash{$key}
(laŭvorte $haktabelo{$ŝlosilo}
[noto 3])
povus esti tradukita kiel elem of array (ero de vico[noto 4]), aŭ key of hash (ŝlosilo de haktabelo).
Tiu sugestas ke kiam vicoj kaj haktabeloj estas indecita, iliaj nomoj vortigendus
per genitiva (aŭ posesiva) kazo. Operacioj de Mult-nivela indico – $array[$row][$column]
(laŭvorte $tabelo[$linio][$kolumno]
) –
signifas "kolumno el linio el tabelo", do la unua indicita taksujo ankaŭ devas
esti vortigita per genitivo. Tabelo 1 egale sumeras tiun rolon.
Perligata | Nombro | Kazo | Deklinacio | Perl | Rolo |
---|---|---|---|---|---|
nextum | akuzativo | singularo | dua | $next
|
skalara dateno |
nexta | akuzativo | pluralo | dua | @next
|
vica dateno |
nextus | akuzativo | pluralo | kvara | %next
|
haktabela dateno |
nexto | dativo | singularo | dua | $next
|
skalara celo |
nextis | dativo | pluralo | dua | @next
|
vica celo |
nextibus | dativo | pluralo | kvara | %next
|
haktabela celo |
nexti | genitivo | singularo | dua | [$next]
|
indicita skalara |
nextorum | genitivo | pluralo | dua | $next[]
|
indicita vico |
nextuum | genitivo | pluralo | kvara | $next{}
|
indicita haktabelo |
Aliadire, skalaroj estas ĉiam singularaj substantivoj, vicoj kaj haktabeloj estas ĉiam pluraloj (sed de malsamaj deklinacioj), kaj la kazo de la substantivo specifas ĝian rolon: akuzativo por dateno, dativo por celo, genitivo kiam indeksita.
La komuna interpunkciaj taksujoj $_ kaj @_ estas specialaj kazoj.
$_ estas ofte la taksigo laŭ implica konsidero[noto 5] (ekzemple, modelrekono, aŭ for
(por) iteracio)
kaj do estas vortigita kiel "ĉi tiu aĵo": hoc en la datena rolo,
huic en la cela rolo,
huius kiam indicita.
Simile, @_ estas implice la listo de aĵoj, kiuj estas pasitaj al proceduro, kaj do estas vortigita kiel "ĉi tiuj aĵoj": haec en la datena rolo, his en la cela rolo, horum kiam indicita.
Aliaj interpunkciaj taksujoj prenas la latina formo de iliaj English.pm-aj
ekvivalentoj (vidu aldono A), ofte kun ampleksa poezia licenco.
Ekzemple, en Perligata, $/
estas vortigita kiel ianitorem (pordisto).
La numeralaj taksujoj – $1, $2
, ktp –
estas vortigitaj kiel sintezaj kunmetaĵoj:
parprimum (parigo unua),
parsecundum (parigo dua), ktp. Kiam indicita, ili uzas genitivajn formojn:
parprimi (de parigo unua),
parsecundi (de parigo dua), ktp. Ĉar ili ne povas esti rekte ŝanĝita
kiel celo de ago, ili ne havas dativajn formojn.
my
, our
, kaj local
edit
En Perligata, la modifilo my
estas vortigita – sensurprize – per la unuaj personoj de posedaj pronomoj:
- meo provizas skalaran situacion;
- meis provizas listan situacion.
Notu ke la modifilo estas ĉiam aplikita al dativo, kaj tiale estas mem deklinaciita per tiu kazo. Tiel:
meo varo haec da. # my $var = @_; meis varo haec da. # my ($var) = @_ meis varis haec da. # my @var = @_;
Simile la modifilo our
estas vortigita kiel
nostro aŭ nostris, laŭ dezirita situacio.
La Perl-a modifilo local
estas loco aŭ locis en Perligata:
loco varo haec da. # local $var = @_; locis varo haec da. # local ($var) = @_ locis varis haec da. # local @var = @_;
Ti estas feliĉega: loco ne nur estas la Latina termo de kie la vorto local devenas, ĝi ankaŭ signifas "anstataŭ de" (kiel en "in loco parentis"). Tiu signifo estas multe pli apuda al la efektiva konduto de la modifilo local
, tio estas nedaŭre instali novan leksemaranon anstataŭ de la nuna.
Proceduroj
editFunkcioj, operaciiloj, kaj uzant-difinitaj proceduroj estas prezentitaj kiel verboj aŭ, en kelkaj situacioj, verbaj nomoj. Tie, la infleksio de la verbo determinas ne nur ĝian semantikan rolon, sed ankaŭ ĝian vokadan situacio.
Uzant-difinitaj proceduroj estas la plej simpla grupo. Por eviti ambigueco, ili ĉiuj estas traktita kiel verboj de la tria konjugacio.
La tabelo 2 ilustras la variajn uzadojn por la uzant-difinita proceduro count()
(nombri).
Perligata | Nombro | Kazo | Modo | ktp | Perl | Rolo | Situacio |
---|---|---|---|---|---|---|---|
countere | - | - | infinitivo | - | sub count
|
difinado | - |
counte | singularo | - | imperativo | - | count()
|
vokado | vakua |
countementum | singularo | akuzativo | - | taksaĵo | count()
|
vok-dateno | skalara |
countementa | plurala | akuzativo | - | taksaĵo | count()
|
vok-dateno | listo |
countemento | singularo | dativo | - | taksaĵo | count()
|
vok-celo | skalaro |
countementis | plurala | dativo | - | taksaĵo | count()
|
vok-celo | listo |
La uzado de infinitivo kiel procedura difino estas evidenta: accipere dirus al Perligata kiel "akcepti" spernere kiel "rifuzi" (malakcepti). Do countere specifas kiel "nombri".
La uzado de imperativo kiel vakua situacio estas ankaŭ klara: accipe komandas al Perligata "akceptu!", sperne diras "rifuzu!", kaj counte petas "nombru!" al ĝi. Ĉiukaze, iu instrukcio estas donita (kaj en vakua situacio egale, do neniu retrobabilado estas atendita).
Pritrakti skalarajn kaj listajn situaciojn estas pli defia. La responda Latino devas ankaŭ havi verbecojn, kiel ago estas elfarita je objektoj. Sed ĝi ankaŭ devas havi la trajtoj de nomo, ĉar la rezulto de la vokado estas uzonta kiel objekto (tio estas, celo aŭ dateno) de iu alia verbo. Feliĉe, Latino havas riĉa sortimento da verbaj nomoj – multe pli ol Angla – kiuj povus okupi tiun rolon.
Ĉar estas la rezulto de la procedura vokado kiu interesas tie ĉi, la plej bona solvo estis uzi la -ememtum sufikson, kiu specifas la (singulara, akuzativa) rezulto de iu ago. Tiu kongruas al la rezulto de proceduro vokita laŭ skalara situacio kaj uzita kiel dateno. Por iu listdatena situacio, la plurala sufikso -ementa estas uzita, kaj, por celoj, la dativaj formoj estas uzitaj: -emento kaj -ementis. Notu ke tiuj finaĵoj estas plene kohera kun tiuj de la tabelo 1.
Senpraaj funkcioj kaj operaciiloj
editSenpraaj funkcioj kaj operaciiloj eblus konformiĝi samskeme al la proceduroj.
Ekzemple shift
(forŝovi) povus esti shifte laŭ vakua situacio,
shiftementa kiam uzita kiel dateno laŭ vica situacio,
shiftemento kiam uzita kiel celo laŭ skalara situacio, ktp.
However, Latin already has a perfectly good verb with the same meaning as shift: decapitare (``to behead). Unfortunately, this verb is of the first conjugation, not the second, and hence has the imperative form decapita, which makes it look like a Perligata array in a data role.
Tamen, Latino jam havas perfekte taŭgan samsignifan verbon kiel shift
:
decapitare (senkapigi). Malfortune, tiu verbo klasifikiĝas en la unua konjugacio, male la unua, kaj tial havas la imperativan formon
decapita, kiu faras ĝin aspekti kiel Perligata vico laŭ datenrolo.
Trajtapartigo neniam estis la plej grava skemkriterio de Perl, do Perligata laŭkutime deteni sin de banala kohereco, favore al estetikoj. Ĉiuj bazvortoj de Perligata – inkluzive nomoj de funkcioj kaj operaciiloj – estas tial specifita kiel korektaj Latinaj verboj per tia ajn taŭga konjugacio, kiu estas necesa. Tabelo 3 montras sortimento el tiuj, dum apendico A enhavas la plena listo de bazvorto de Perligata.
Operaciilo / funkcio | Signifigita kiel | Vakua situacio | Skalara dateno | Lista dateno |
---|---|---|---|---|
+
|
"aldoni" (adicii) | adde | addementum | addementa |
=
|
"doni" | da | damentum | damenta |
.
|
"kunligi" | sere | serementum | serementa |
..
|
"varbiĝi" (aniĝi) | conscribe | conscribementum | conscribementa |
shift
|
"senkapigi" | decapita | decapitamentum | decapitamenta |
push
|
"stapli" | cumula | cumulamentum | cumulamenta |
pop
|
"malstapli" | decumula | decumulamentum | decumulamenta |
grep
|
"ventumi" | vanne | vannementum | vannementa |
print
|
"skribi" | scribe | scribementum | scribementa |
write
|
"subskribi" | subscribe | subscribementum | subscribementa |
die
|
"morti" | mori | morimentum | morimenta |
Notu, tamen, ke kohereco ne estis tute forlasita. La retroformadoj de infleksioj por skalaraj kaj listaj situacio estas tute regula, kaj kohera kun tiuj de uzant-difinitaj proceduroj (Tabelo 2).
Kelkaj prafunkcioj de Perl –
pos
,
substr
,
keys
–
estas uzebla kiel transtaksaĵo. Tio estas, ili povas esti celo de iu alia ago (tipe, de asignado).
En Perligata, tiaj kazoj estas skribita laŭ dativa singularo (ĉar la transtaksaĵo estas ĉiam skalara).
Notu ankaŭ ke ĉar asignado al transtaksaĵa funkcio modifas la unuan argumenton, la argumento estas ankaŭ celenda, kaj tial estas ankaŭ dative skribenda.
Tiel:
nexto stringum reperimentum da. # $next = pos $string; nextum stringo reperimento da. # pos $string = $next;
inserto stringum tum unum tum duo excerpementum da. # $insert = substr($string,1,2); insertum stringo unum tum duo excerpemento da. # substr($string,1,2) = $insert;
keyis hashus nominamentum da # @keys = keys %hash; keya hashibus nominamento da # keys %hash = @keys;
Kodingoj kaj ŝaltestriloj
editAlkreskadaj lingvoj ĝenerale uzas iu parenteza aparato – kiel krampoj, komoj, aŭ (kiel ĉi tie) strekoj – por grupi kaj separi kolektojn da vortgrupo aŭ eldiro.
Iu tia meĥanismo estus evidenta elekto por signi kodingojn de Perligata,
sed ekzistas pli estetike plaĉa solvo. La Perl-aj limigiloj de kodingoj
({…}
) havas du apartaj dezirindaj ecoj:
ili estas unuope kurtaj, kaj ĉiomope simetria.
Estis konsiderita grava ke estis retenita tiuj ecoj en Perligata
Latine, la vorto sic signifas tiel. Feliĉe, ĝia retrolitervica cis havas la antoniman signifon (inter aliaj) "ĝis tie, ĝis tiu limo". La allogeco de tia speco de vortludo estante nerezistebla, Perligata limigas kodingojn de ordonoj per tiuj vortoj. Ekzemple
sic # {
loco ianitori. # local $/;
dato fonti perlegementum da. # $data = <DATA>;
cis # }
Ŝaltpeliloj de Perligata estas vortigitaj kiel kondiĉa takseblaĵo, kiel ĝi okazas Latine, en Angla kaj Perl-e. Kaj kiel laŭ tiuj lingvoj, ili povas antaŭi aŭ sekvi la kodblokojn ili pelas. Tabelo 4 resumas la ŝaltpelioj ke Perligata provizas.
Perligata | Perl | Traduko |
---|---|---|
si … fac | if …
|
se … faru |
nisi … fac | unless …
|
krom se … faru |
dum … fac | while …
|
dum … faru |
donec … fac | until …
| |
per (quisque) … in
… fac |
for(each) …
|
por (ĉiuj) … el … faru |
posterus | next
|
antaŭsekvante (antaŭ(cikl)sekvŝalte) |
ultimus | last
|
laste (ĉeŝalte, eksterŝalte) |
reconatus | redo
|
refare (reciklŝalte) |
confectus | continue
|
sekvante ((cikl)sekvŝalte) |
La trenaĵo fac (faru) estas la imperativa formo de facere (fari) kaj estas uzita kiel limigilo de la pelordona kondiĉo.
La elekto de dum kaj donec estas plene arbitra, ĉar Latino ne distingas while (dum) kaj until (ĝis) kiel abstraktoj sammaniere ol Angla faras. Dum kaj donec ambaŭ signifas dum kaj ĝis, kaj Latino fidas situacion por distingi ilin. Tio estas maloportuna por Perligata, do ĝi ĉiam traktas dum kiel while (dum) kaj donec kiel until (ĝis). Tiu elekto estas farita por favori per la plej kurta termino la plej oftan tipon de iteraciilo.
La elekto de
confectus por
continue
celas transdoni la funkcion de ŝaltpelilo, prefere ol la laŭvorta signifo de la Angla origina.
Tio estas, continue
-a kodingo specifas kiel kompletigi
conficere ciklilon.
Perligata only supports the pure iterative form of for(each), not the C-like three-part syntax. Because:
Perligata nur apogas la puran ciklilan formo de for(each)
,
ne la tripartan sintakson simila al C. Ĉar:
for $var (@list) …
signifas "por ĉiuj taksujo el la listo…", la skalara taksujo devas esti en akuzativo (ĉar ĝi estas regita per "por"), kaj la listo devas esti en ablativo (kiu indikas inkluzivon). Fortune, en la dua deklinacio, la fleksio por ablativo estas ekzakte la sama ol dativoj, donanta:
per quisque varum in listis...
Tio signifas ke neniuj ekstraj fleksioj necesas lernadon nur por uzi per-a ciklilo. Pli bone, la listo (listis ŝajnas kiel Perligata vica taksujo laŭ celrolo, kio estas klare la kazo, ĉar ĝia enhavo povas esti modifita ene de ciklingo.
Diversaj aliaj trajtoj
editNombroj
editNombraj rektaksaĵoj en Perligata estas vortigitaj per Romanaj ciferoj – I, II, III, IV...XV...XLII, ktp. Tamen, la unuaj dek nombroj ankaŭ estas nomebla laŭ unum, duo, tres, quattuor, quinque, sex, septem, octo, novem, decem. Nulo, por kiu estas neniu Latina nombro, estas vortigita per nullum (neniu). Nihil (nenio) eble estus pli proksima vortigado, sed ĝi estas senfleksia kaj tial nedistingebla laŭ akuzativo kaj genetivo.
Kiam nombra rekttaksaĵo estas uzita por indica operacio, ĝi estendas numero (unua el, dua el, ktp). La unua dek nombroj estas nomita: primum, secundum, tertium, quartum, quintum, sextum, septimum, octavum, nonum, decimum (akuzative, kompreneble, ĉar ili ĉiam estas dateno). Numeroj pli granda ol dek estas prezentitaj per iliaj respondaj nombroj, kun sufikso -imum : XVimum (15a) XLIIimum (42a), ktp. Analoge, numera nulo estas vortigita per invitita formo nullimum.
En mult-nivela indica operacio, numeroj povas necesi la uzadon de genetivo: nulli, primi, secundi, tertii, quarti, …, XVimi, …, XLIIimi, ktp.
Ekzemple
$unimatrix[1][3][9][7];
estus:
septimum noni tertii primi unimatrixorum # seventh of ninth of third of first of unimatrix
Note that the order of the genitives is significant here, and is the reverse of that required in Perl.
Notu que la ordo de la genetivoj estas signifa tie ĉi, kaj estas la inversa de tiu, kiun uzas Perl’.
Ŝlosonaj nombroj esprimiĝas kiel Latina frakcioj en Perligata:
unum quartum # 0.25 MMMCXLI Mimum # 3.141
Notu ke la numeranto ĉiam estas iu povo kaj la nomanto estas iu numero (kvarono, 31,411,000ono). Teknike, ambaŭ devus esti en la ina genro – una quarta, MMMCXLI Mimae – sed tiu Latina regulo ne estas eldevigita en Perligata
Ĉenoj
editClassical Latin does not use punctuation to denote direct quotation. Instead the verb inquit (``said) is used to report a direct utterance. Hence in Perligata, a literal character string is constructed, not with quotation marks, but by invoking the verbal noun inquementum (``the result of saying), with a data list of literals to be interpolated. For example:
Klasika Lation ne uzas interpunkcio por indiki rektan citadon. Anstataŭe la verbo inquit (diras) estas uzita por raporti rektan eldiron. Tial en Perligata, ĉeno de rekttaksaĵa signo estas konstruita, ne per citmarkoj, sed per alvokado la verba nomo inquementum (eldirigo), kun datena listo de interpolendaj rekttaksaĵoj. Ekzemple
print STDOUT 'Enter next word:';
devenas:
Enter tum next tum word inquementum tum biguttam egresso scribe.
Note that the arguments to inquementum are special in that they are treated as literals. Punctuation strings have special names, such as lacunam (``a hole -> space), stadium (``a stride -> tabspace), novumversum (``new verse -> newline), or biguttam (``two spots -> colon).
Notu ke la argumentoj de inquementum estas specialaj pro tio ke ili estas traktitaj kiel rekttaksaĵoj. Interpunkciaj ĉenoj havas specialaj nomoj, kiel lacunam (breĉo, truo, tio estas spaceto), stadium (stadiono, paŝego, tio estas tabo), novumversum (nova verso, tio estas nova linio), biguttam[1] (du makuloj: tio estas du punkto).
Perligata ne provizas meĥanismo de interpolitaj citadoj. Anstataŭe, taksujoj devas esti ligitaj al iu ĉeno . Do:
print STDERR "You entered $word\n";
devenas:
You tum entered inquementum tum wordum tum novumversum oraculo scribe.
Referencoj
editPor krei novan referencon al taksujo kun datena rolo (taksujoj kun cela rolo estas aŭtomate elreferencita), la taksujo estas enkondukita kun la prepozicio ad (al). Por krei referenco al proceduro, la asociita verbo estas infleksiita kun la sufikso -torem ("iu, kiu…", -ul-), por produkti la respondan agentecnomo.
ekzemple
val inquementum datuum ad datum da. # $dat{val} = \$data;
arg inquementum datuum ad arga da. # $dat{arg} = \@arg;
act inquementum datuum functorem da. # $dat{act} = \&func;
A special case of this construction is the anonymous subroutine constructor factorem (``one who does...), which is the equivalent of sub {...} in Perl:
Iu speciala kazo de tiu konstruado estas konstruiloj de sennoma proceduroj factorem ("iu kiu igas…"), kiu ekvivalentas Perl-an sub {…} in
:
anonymo da factorem sic haec mori cis. # $anon = sub { die @_ };
Kiel en Perl’, tiel proceduroj povas esti alvokita per ligi vokadan specifilon al la nomo de la taksujo, kiu entenas la referencon:
anonymume nos tum morituri inquementum. # &$anon('Nos morituri');
Notu ke la taksujo kiu entenas la referenco (anonymum) estas uzita kiel dateno, do ĝi estas nomita akuzative.
En kelkaj kazoj, kie iu reference de proceduro povas esti celita de iu ago, la dativa sufikso (-tori estas uzita anstataŭe:
benedictum functori classum. # bless \&func, $class;
benedictum factori sic mori cis classum. # bless sub{die}, $class;
Duvalenta logiko
editPerl's logical conjunctive and disjunctive operators come in two precedences, and curiously, so do those of Latin. The higher precedence Perl operators -- && and || -- are represented in Perligata by the emphatic Latin conjunctions atque and vel respectively. The lower precedence operators -- and and or -- are represented by the unemphatic conjunctive suffixes -que and -ve. Hence:
Perl-aj logikaj operaciiloj de konjunkcio kaj disjunkcio proviziĝas laŭ du antaŭeco,
kaj kurioze, ĝi ankaŭ estas la kazo en Latino. En Perligata la plej antaŭecaj operaciiloj de Perl’ –
&&
kaj
||
– estas prezentitaj
per la emfazaj Latinaj konjunkcioj
atque
vel respektive.
La malpli antaŭecaj operaciiloj –
and
kaj
or
–
estas prezentitaj per malemfaza konjunkciaj sufiksoj
-que
-ve. De tie ĉi:
resulto damentum foundum atque defum. # $result = $found && $def;
resulto damentum foundum defumque. # $result = $found and $def;
resulto damentum foundum vel defum. # $result = $found || $def;
resulto damentum foundum defumve. # $result = $found or $def;
Notu ke, kiel en Lation, la sufikso de la malemfaza konjunkcio ĉiam estas almetita al la unua vorto post la punkto kie la konjunkcio aperus Angllingve. Tiel:
$result = $val or max($1,$2);
estas vortitigita kiel:
resulto damentum valum parprimumve tum parsecundum maxementum.
Ĝustaj latinaj komparoj estus hida en Perligata, ĉar ili necesas ilia unua argumento esti esprimita nominative kaj ili mem estus indikative esprimenda.
Tiu, evidente, eĉ pli bonigus la eksterloka de la lingvo, permisanta:
si valus praecedit datum... # if $val < $dat...
si praecedit datum valus... # if $val < $dat...
si datum valus praecedit... # if $val < $dat...
Malfortune, tio ankaŭ enkondukas alian infleksian kazaron kaj alian verban sufikson. Plimise, tio signifus ke la nomaj sufiksoj ne plu estas sensdistingebla. Laŭ la dua deklinacio, la nominativa pluralo finas kun la sama -i ol la genitiva singularo, kaj la noinativa singularo finaĵo (-us) estas la sama ol la sufikso de akuzativa pluralo por la kvara deklinacio. Do, se nominativo estus uzita, skalaroj ne plu ĉiam esti distingita el vicoj aŭ haktabeloj, escepte laŭ situacio.
To avoid these problems, Perligata represents the equality and simple inequality operators by three pairs of verbal nouns as described in Table 5.
Por eviti tiuj problemoj, Perligata prezentas operaciilojn de egaleco kaj simpla neegaleco per tri paroj de verbaj nomoj kiel priskribita en tabelo 5.
Perligata | Signifo | Perl’ |
---|---|---|
aequalitam | "egaleco (ol...)" | ==
|
aequalitas | "egalecoj (ol...)" | eq
|
praestantiam | "antaŭeco (ol...)" | <
|
praestantias | "antaŭecoj (ol...)" | lt
|
comparitiam | "komparo (ol...)" | <=>
|
comparitias | "komparoj (ol...)" | cmp
|
Ĉiu opeciilo prenas du datenajn argumetojn, kiuj ĝi komparas:
si valum tum datum aequalitam... # if $val == $dat... si valum praestantias datum... # if $val lt $dat... digere sic aum comparitiam bum cis lista. # sort {$a<=>$b} @list;
Notu ke kvankam digere ŝajnas kiel infinitivo (tio estas, iu difino de proceduro), ĝi fakte estas imperativo de digerere (ordi, klasi, distribui) kaj estas la bazvorto de Perligata por sort
.
La filozofiemuloj povus elekti al pensi ke la okaziga konfuzo estas formo de Tuaj Justico vizitanta tiujn, kiuj uzas sort
en vakua situacio.
La efektoj de aliaj komparaj operaciiloj –
>
,
<=
,
!=
,
ne
,
ge
, ktp –
estas atingita per taŭga ordado de la du argumentoj kaj kombinado kun la operaciilo de logika negacio non:
si valum datum non aequalitam... # if $val != $dat...
si datum praestantiam valum... # if $val > $dat...
si valum non praestantias datum... # if $val ge $dat...
Pakoj kaj klasoj
editLa bazvorto de Perligata por deklari iun pakon estas domus, laŭvorte "la domo de". Tiele, la nomo de la klaso sekvas la bazvorto kaj estas traktita kiel iu rekttaksaĵo; kiel se ĝi estus datena argumento de inquememtum.
Por plenspecifi taksaĵon aŭ proceduron kiel enhavanta al pako,
la prepozicio
intra (ene) estas uzita. Por voki proceduron
kiel metodo de specifa pako (aŭ de iu objekto), la prepozicio
apud (egale apud esperante sed la latina vorto havas egale aliaj signifoj) estas uzita.
La Perla funkcio bless
estas
benedice (benu) laŭ Perligata, sed kvavaŭe nevarie uzita laŭ skalara datena rolo
benedictum.
Tiele:
domus Specimen. # package Specimen;
newere # sub new
sic # {
meis datibus. # my %data;
counto intra Specimen
postincresce. # $Specimen::count++;
datibus nullum horum benedictum. # bless \%data, $_[0];
cis # }
printere # sub print
sic # {
modus tum indefinitus inquementum mori. # die 'method undefined';
cis # }
domus princeps. # package main;
meo objecto da # my $object =
newementum apud Specimen. # Specimen->new;
printe apud objectum; # $object->print;
Kunigi ĉiujn – greka ciklsolvilo per Latino
editLa kribrilo de Eratosteno estas el la plej maljunaj bonkonitaj ciklsolviloj. Kiel romana kulturo plejparte estis prunteprenita de grekoj, estas eble taŭga ke la tute unua Perligata programo egale sekvas tiun kutimon.
#! /usr/local/bin/perl -w
use Lingua::Romana::Perligata;
maximum inquementum tum biguttam egresso scribe.
meo maximo vestibulo perlegamentum da.
da duo tum maximum conscribementa meis listis.
dum listis decapitamentum damentum nexto
fac sic
nextum tum novumversum scribe egresso.
lista sic hoc recidementum nextum cis vannementa da listis.
cis.
La ordono use Lingua::Romana::Perligata
kaŭzas ke la cetero de la programo estas tradukita al la sekvanta Perla kodo:
print STDOUT 'maximum:';
my $maxim = <STDIN>;
my (@list) = (2..$maxim);
while ($next = shift @list)
{
print STDOUT $next, "\n";
@list = grep {$_ % $next} @list;
}
Notu ke, en la tute lasta Perligata ordono ( lista sic hoc...da listis
),
la uzado de infleksio distingas la taksujon @list
, kiu estas grep
ita (lista) de la taksujo @list
kiu estas asignita (listis) , kvankam ĉiu estas al mispozicia fino de la ordono, kompare ol la Perla versio.
La realigo de la modulo Lingua::Romana::Perligata
edit
La modulo meme estas vera simpla ekzemplo de fontfiltrilo, kaj uzas la modulon Filter::Util::Call
fare de Paul Marquess. La perligata sintaksanalizilo estas alvokita per unuopa proceduro, kiu estas vokita kiel filtrilo por la fontokodo, kiel priskribita en la sekvantaj sekcioj.
Filtri
editLa modulo Filter::Util::Call
amplekse faciligas la taskon de fontkodo prefilrado.
Filtrila modulo kiu uzas Filter::Util::Call
simple aldonas la ordono filter_add({})
al ĝia inporta proceduro.
Tiam, kiam la filtrila modulo ĝi-mem estas uzita en iu ajn kodo, Filter::Util::Call
serĉas en la filtrantan modulon por proceduro nomita filter
(filtru), kiu ĝi vokas. Tiu filtra proceduro povas aliri al la fontkodo ekde la dosiero kiu vokis la filtrantan modulon, kaj povas ŝanĝi tiun kodon taŭge.
Kiu ajn ĉeno estas en la taksujo $_
kiam la filtrila proceduro reŝaltas, tiun estas provizita al la tradukilo kiel fina programfonto.
Distermaperigado
editPor Lingua::Romana::Perligata la filtrila proceduro konformas al la kutima strukturo de gramatiko-baza sintaks-analizilo/tradukilo. Ĝi unue alvokas distermigilon por pecigi la Perligata fontkodo al ĉeno de termoj.
La distermigilo estas vere simpla: ĝi nur disigas la fonto po blankspaco aŭ po punkto, kaj sekve klasas ĉiu vorto en la taksaĵa listo per kongrui ĝin kun serio de skemoj kun kreskaj ĝeneraleco. Ĉeftermoj estas testitaj unue, sekvitaj de nombroj kaj ciferoj, interpunkciaj taksujoj, uzant-difinitaj funkciojn en skalara kaj lista situacioj, uzant-difinitaj proceduroj en vakua situacio, taksujoj en celrolo (t.e. dativoj) kaj fine taksujoj en datenrolo (akuzativoj).
Dum ĉiu vorto estas klasita, ĝi egale estas konvertita al objekto de la kongrua termtipo – ĉeftermo, nombro, taksujo, proceduro, ktp. Ĉiu objekto memoras la origina vorto (leksemo) kaj ĝia kongrua Perla konstruaĵo. Ekzemple, la ĉeno 'dum maxo maxa maxamentum damentum' liveri listan ekvivalenton al:
(
bless({ raw=>'dum', perl=>'while' }, 'Conditional' ), # Kondicionalo
bless({ raw=>'maxo', perl=>'$max' }, 'Noun_Dative' ), # Noma_Dativon
bless({ raw=>'maxa', perl=>'@max' }, 'Noun_Accusative' ), # Noma_Akuzativon
bless({ raw=>'maxamentum', perl=>'&max' }, 'Verb_Resultative'), # Verba_Rezultigo
bless({ raw=>'da', perl=>'=' }, 'Verb_Imperative ), # Verba_Imperativo
)
Tiuj objektoj tiam formas fluon de termoj, kiu estas pasita al la sintaksanalizilo.
Sintaksanalizado
editLa pozicia-sendependeco de plejparta el Perligata gramatiko faras ke la tasko de sintaksanalizi ĝin estas malfacilega kiam uzi normajn ilojn, kiuj estas tipe supozas ke leksikaj komponojn aperas laŭ rigide difinita sinsekvo.
Ekzemple, por skribi rulon, kiu respondas al Perligataj proceduraj vokoj, la sekvanta estas necesa:
Action: Dative AccusativeList Verb
| AccusativeList Dative Verb
| AccusativeList Verb Dative
| Dative Verb AccusativeList
| Verb Dative AccusativeList
| Verb AccusativeList Dative
| Accusative Verb Accusative
| Dative Verb
| AccusativeList Verb
| Verb Dative
| Verb AccusativeList
| Verb
La malfacilaĵoj estas plie ampliksita per la fakto ke celoj kaj datenoj povas egale esti (la rezulto de) aliaj pozicia-sendependecaj proceduraj vokoj.
Tio produktas ekrekursivan gramatikon kun malkutima ampleksa nombro da ŝovado/redukto kaj redukto/redukto de dubasenco (pli ol 100 por ĉiu dubasenco), kio faras la gramatiko tre influeblema al subregula antaŭeco kaj al la ordado de produktadoj ene de ĉiu regulo. Aldonaĵo B montras la plena gramatiko.
Por elteni kompetente kun tiuj limigoj, Lima Anticipa Laŭflua Retroderiva (LALR) sintaksanalizilo estis konstruita pere de la bonega Parse::Yapp modulo fare de François Désarménien.
Tradukado kaj rulado
editĈiu regulo de Perligata gramatiko enhavas enmetitan agon. Ope tiuj agoj konstruas plenan arbon de sintaksanalizo de la fontkodo dum la gramatiko sintaksanalizas ĝin. Ĉiu nodo de la arbo estas klasigata objekto apertenanta al klaso, kiu anstataŭas la responda Perla konstruaĵo. Ekzemple, post ĝi estis sintaksanalizita la fragmento "dum maxo maxa maxamentum damentum" estos konvertota al la sekvanta arbo:
bless( {
condition =>
bless( {
target =>
bless( { raw => 'maxo', perl => '$max' }, 'Var_Target'),
data =>
bless( {
raw => 'maxamentum', perl => '&max',
data => [
bless( { raw=>'maxa', perl=>'@max' }, 'Var_Data'),
],
}, 'SubCall'),
}, 'Assignment'),
block =>
undef,
}, 'WhileLoop');
Unufoje ke la arbo estas konstruita, la samtaksa Perla kodo estas akirata per
vokado de la metodo codify()
tra la radiknodo te la arbo. Tio rikure
alvokas la codify()
metodoj de ĉiuj subnodoj de la arbo,
ĉiu kies liveras ĉenon, kiu enhavas fragmenton de Perlan kodon, responda
al la subarbo de tiu nodo. Per kunĉenigi tiujn fragmentojn, ĉeno
kiu enhavas la plena Perla programaro estas genata. Tiu ĉeno estas asignita
al $_
post fino de proceduro filter()
, por esti ruleblgenata
kaj rulata aŭtomate per Filter::Util::Call
.
Konkludo
editLatino estas surprize taŭgega por Perl’. La riĉa kaza strukturo provizas abundeco de eblaj mapadoj por Perlaj datenaj tipoj kaj proceduraj vokoj, speciale kiam Perl’ propra eklektika sintakso kaj semantiko estas mapigitaj al la pli regula "ago/celo/dateno" modelo.
La uzo de fleksio por indiki semantikajn rolojn en programlingvo oferas interesan variadon de la ĉieesto de pozicia sintakso, anstataŭiganta la bezonon de memori sintaksajn regulojn per bezono de memori sufiksojn. Kio el tiuj du taskoj estas la plej facila verŝajne varios de programisto al programisto.
Kun la eldono de tiu modulo al CPAN, la aŭtoro atendas senpacience la alveno de vere epika epopea Perla poezio.
Dankesprimoj
editSpecialaj dankojn al John Crossley, Tom Christiansen, kaj Bennett Todd por ilaj netakseblaj rimarkoj kaj sugestoj. Kaj mia daŭra dankemo al David Secomb kaj Deane Blackman por iliaj pacienco dum helpi min lukti kun la embarasoj de lingua Romana.
Aldono A: Perligata vortaro
editTiu aldono listas la plena Perligata vortprovizo, escepte por Romana numeroj (I, II, III, ktp.).
En ĉiu de la sekvantaj tabeloj, la tri kolonojestas ĉiam la samaj:
- Perla konstruaĵo
- Perligata samtaksaĵo
- Litera signifo de la Perligata samtaksaĵo.
Generale, nur la akuzativa formo estas indikita por nomoj kaj adjektivoj, kaj nur la imperativo por verboj.
0 | nullum | neniu |
1 | unum | unu |
2 | duo | du |
3 | tres | tri |
4 | quattuor | kvar |
5 | quinque | kvin |
6 | sex | ses |
7 | septem | sep |
8 | octo | ok |
9 | novem | naŭ |
10 | decem | dek |
1/2 | secundum | due |
1/3 | tertium | trie |
1/4 | quartum | kvare |
1/5 | quintum | kvine |
1/6 | sextum | sese |
1/7 | septimum | sepe |
1/8 | octavum | oke |
1/9 | nonum | naŭe |
1/10 | decimum | deke |
$1 | parprimum | egala al la unua |
$2 | parsecundum | egala al la dua |
$3 | partertium | egala al la tria |
$4 | parquartum | egala al la kvar |
$5 | parquintum | egala al la kvina |
$6 | parsextum | egala al la sesa |
$7 | parseptimum | egala al la sepa |
$8 | paroctavum | egala al la oka |
$9 | parnonum | egala al la naŭa |
$10 | pardecimum | egala al la deka |
$/ | ianitorem | pordisto |
$#var | admeta | mezuri |
$_ | hoc/huic | tiu aĵo |
@_ | his/horum | tiuj aĵoj |
":" | biguttam | du punktoj |
" " | lacunam | breĉo |
"\t" | stadium | "a stride" |
"\n" | novumversum | nova linio |
local | loco | anstataŭ de |
my | meo | mia |
our | nostro | nia |
main | princeps | ĉefa |
inque | diri | |
q// | inque | diri |
m// | compara | respondi |
s/// | substitue | anstataŭigi |
tr/// | converte | traduki |
y/// | converte | traduki |
+ | adde | aldonas |
- | deme | substraktas |
- | nega | neas |
* | multiplica | muliplikas |
/ | divide | dividas |
% | recide | falaĵigas |
** | eleva | levas |
++ | preincresce | pliigas antaŭe |
++ | postincresce | pliigas poste |
-- | predecresce | malpliigas antaŭe |
-- | postdecresce | malpliigas poste |
abs | priva | senigas el |
atan2 | angula | kreas angulon |
sin | oppone | kontraŭas |
cos | accuba | kuŝi apud |
int | decolla | demetas |
log | succide | subfalas |
sqrt | fode | radiki |
rand | conice | loti |
srand | prosemina | dissemi |
! | non | ĝenerala neeco |
&& | atque | emfaza kaj |
|| | vel | emfaza aŭ |
and | -que | kaj |
or | -ve | aŭ |
< | praestantiam | antaŭeco de |
lt | praestantias | antaŭecoj de |
<=> | comparitiam | komparaĵo de |
cmp | comparitias | komparaĵoj de |
== | aequalitam | egaleco de |
eq | aequalitas | egalecoj de |
chomp | morde | mordas |
chop | praecide | antaŭfalas |
chr | inde | nomdonu al |
hex | senidemi | po dek ses |
oct | octoni | po ok |
ord | numera | nombras |
lc | deminue | malkreskas |
lcfirst | minue | malkreskas |
uc | amplifica | kreskas |
ucfirst | amplia | kreskas |
quotemeta | excipe | esceptigas |
crypt | huma | entombigas |
length | meta | mezuras |
pos | reperi | lokdonas |
pack | convasa | enpakas bagaĝon |
unpack | deconvasa | elpakas bagaĝon |
split | scinde | disiĝas |
study | stude | studas |
index | scruta | serĉas |
join | coniunge | kuniĝas |
substr | excerpe | eltiras |
defined | confirma | kontrolas |
undef | iani | vakua, vakuigas |
scalar | secerna | distingas, izolas |
reset | lusta | purigi |
pop | decumula | malakumulas, konsumas, elstakigas |
push | cumula | akumulas, elstakigas |
shift | decapita | senkapigi |
unshift | capita | kronas, enkapigi |
splice | iunge | splisas |
grep | vanne | ventumas |
map | applica | aplikas , mapigas |
sort | digere | ordigas |
reverse | retexe | inversigas |
delete | dele | forviŝas |
each | quisque | ĉiu |
exists | adfirma | konfirmas |
keys | nomina | nomoj |
values | argue | malkaŝi enhavon |
open | evolute | malfermu libron |
close | claude | fermu libron |
eof | extremus | fino de, ekstremaĵo |
read | lege | legu |
getc | sublege | prenu ion, sublegu |
readline | perlege | tralegu |
scribe | skribu | |
printf | describe | priskribu |
sprintf | rescribe | reskribu |
write | subscribe | subskribu |
format | pinge | farbu, pentru, peniku |
formline | distingue | intermeti, interplekti |
pipe | inriga | irigacii, dreni |
tell | enunta | diru |
seek | conquire | serĉi |
STDIN | vestibulo | enirejo |
STDOUT | egresso | elirejo |
STDERR | oraculo | pereo-deklarejo |
DATA | fonti | fonto |
{...} | sic...cis | jene… cise (ĝis tie) |
do | fac | faru |
sub {...} | factorem sic...cis | iu faranta jene… cise |
eval | aestima | taksi |
exit | exi | eliri |
for | per | por |
foreach | per quisque | por ĉiu |
goto | adi | iru al |
if | si | se |
return | redde | redonu |
unless | nisi | se ne |
until | donec | ĝis |
while | dum | dum |
wantarray | deside | volu |
last | ultimus | lasta |
next | posterus | sekvanta |
redo | reconatus | provi denove |
continue | confectus | kompletigu |
die | mori | mortu |
warn | mone | avertu |
-> | apud | el la domo de |
:: | intra | ene |
bless | benedice | benu |
caller | memora | rakontu historion |
package | domus | domo de |
ref | agnosce | identigi |
tie | liga | ligi |
tied | exhibe | montri ion |
untie | solve | malligi |
require | require | bezoni |
use | ute | uzi |
chdir | demigrare | migri |
chmod | permitte | permesu, allasu, ebligu |
chown | vende | vendu |
fcntl | modera | funkciigu |
flock | confluee | kungregiĝu |
glob | inveni | serĉi |
ioctl | impera | komandu |
link | copula | ligu |
unlink | decopula | malligu |
mkdir | aedifica | konstruu |
rename | renomina | renomu |
rmdir | excide | eldetruu |
stat | exprime | priskribu |
truncate | trunca | mallongigu |
alarm | terre | teruru |
dump | mitte | forlasi |
exec | commuta | transformu |
fork | furca | forko |
kill | interfice | mortigu |
sleep | dormi | dormu |
system | obsecra | petegu al plialta potenco |
umask | dissimula | masku |
wait | manta | atendu |
Table A11: Miscellaneous operators
, | tum | tiame |
. | sere | komponi, kunligi |
.. | conscribe | varbiĝi |
\ | ad | al |
= | da | donas |
Aldone B: Perligata gramatiko
editScript: Statement(s) # Skripto: ordono(j)
Statement ( Conditional | Imperative | Data | Target ) '.' # Ordono, Kondicionalo, Imperativo, Dateno, Celo
Conditional: Control Block # Kondicionalo, Ŝaltpelilo, Ingo
| Imperative Control
Control: 'dum' Data 'fac' # dum, faru
| 'donec' Data 'fac' # ĝis
| 'si' Data 'fac' # se
| 'nisi' Data 'fac' # krom-se
| /per (quisque)?/ NOUN_ACCUSATIVE(?) # por (ĉiu), akuzativa nomo
'in' Target 'fac' # en
Block: 'sic' Script 'cis' # jene, cise
Imperative: Data Verb Data
| Target Datalist Verb # celo, datenlisto, verbo
| Datalist Target Verb
| Datalist Verb Target(?)
| Target Verb Datalist(?)
| Verb Target Datalist(?)
| Verb Datalist Target(?)
| Verb
Target: NOUN_DATIVE # dativa nomo
| POSSESSIVE NOUN_DATIVE # posesivo (tio estas) my $A, local @B, ktp.
| Block
| Data Resultative_dative Data # dativa rezultanto
| Target Datalist Resultative_dative
| Datalist Target Resultative_dative
| Datalist Resultative_dative Target(?)
| Target Resultative_dative Datalist(?)
| Resultative_dative Target Datalist(?)
| Resultative_dative Datalist(?) Target(?)
| Target 'intra' Accusative # B::A
| Target 'apud' Dative # B->A
| Target NOUN_GENITIVE # B[A]
| 'factori' Block # sub {...}
Accusative: NOUN_ACCUSATIVE
| 'ad' Accusative # \A
| Accusative 'intra' Accusative # B::A
| Accusative 'apud' Accusative # B->A
| Accusative NOUN_GENITIVE # B[A]
| 'factorem' Block # sub {...}
Data: Accusative
| 'nega' Data # -A
| 'non' Data # !A
| Data Resultative_accusative Data
| Target Datalist Resultative_accusative
| Datalist Target Resultative_accusative
| Datalist Resultative_accusative Target(?)
| Target Resultative_accusative Datalist(?)
| Resultative_accusative Target Datalist(?)
| Resultative_accusative Datalist(?) Target(?)
Verb: VERB
| Verb 'intra' Accusative # B::A()
| Verb 'apud' Dative # B->A()
Resultative_dative:
RESULTATIVE_DATIVE
| Resultative_dative 'intra' Accusative
| Resultative_dative 'apud' Dative
Resultative_accusative:
RESULTATIVE_DATIVE
| Resultative_accusative 'intra' Accusative
| Resultative_accusative 'apud' Dative
Datalist: Datalist 'tum' Data
| Data
Notoj
edit- ↑ Esperanto ne havas dativon, kvankam ekzistas fantaziaj proponoj, kiel Arcaicam Esperantom kie -d markas dativon kiel -n por la akuzativo en Esperanto. Sed en Esperanto, oni kutime uzas la propozicio "al" antaŭ la nerekta objekto.
- ↑ Esperanto uzas aŭ pluron aŭ la -ar- afikson por tio.
- ↑ La vorto ŝlosilo estas klasika sed analogia termo, anstataŭebla per indico, indikilo, montrilo. La Angla termo havas avantaĝo de mallongeco. En esperanto, la termo "nadlo" estas ankaŭ uzebla per analogio, kun malpli longa vorto.
- ↑ Aŭ vicero
- ↑ Lingvistike ili nomiĝas deiktoj.
Referencoj
edit- ↑ Vidu biguttatus