Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: FrankieG 12. 09. 2013, 21:17:55

Název: BSL: vysvětlění funkce substring
Přispěvatel: FrankieG 12. 09. 2013, 21:17:55
Dobrý den,

nejsem zadny programator, tak se omlouvam, pokud se dotazuji na primitivni problem, ale zkratka mne to neda spat. Jsem zapsan do jednoho kurzu na Coursera, ktery uci zaklady programovani v jazyce BSL(basic student language), musim uznat, ze je kurz docela dobre promysleny a i jazyk neni spatny pro zacatek. No a abych se dostal k problemu. Delam jeden quizz a v nem je priklad, ktery souvisi s tzv. "substring". Bohuzel ani v kurzu ani nikde jinde to neni dost dobre vysvetlene, tak snad mne zde poradite. Abych uvedl priklad, jak takovy substring vypada:
Examples:
> (substring "Apple" 1 3)
"pp"
> (substring "Apple" 1)
"pple"

(farfle (substring "abcdef" 0 2))

(farfle "ab")

No a mne jde prave o to, poznat, ktere to pismeno teda ma ten substring vyplivnout. Dekuji moc za pochopeni
Název: Re:BSL - Substring
Přispěvatel: DK 12. 09. 2013, 23:30:59
priklad c.1: od 1. (vcetne) znaku po 3. (bez)
priklad c.2: od 1. (vcetne) znaku po konec
priklad c.3: od 0. (vcetne) znaku po 3. (bez)

ty cisla jsou indexy, proto nulty znak
Název: Re:BSL: vysvětlění funkce substring
Přispěvatel: Karel 13. 09. 2013, 13:50:13
substring bývá funkce vracející část zadaného řetězce. Tedy funkce, která se dá popsat jako:
Vezmi zadaný text a vrať mi jeho požadovanou část. Tedy třebas: vrať mi dva znaky z řetězce "Apple", počínaje druhým znakem.

Obdoba existuje prakticky ve všech jazycích, pouze se liší názvem (substr, mid, ...) a významem parametrů. Nejčastěji se vyskytují tyto tři alternativy parametrů:
1. Index prvního znaku, počet znaků
2. Index prvního znaku, index posledního znaku
3. Index prvního znaku, index prvního znaku, který už ale nevracet

Celé se to ještě komplikuje tím, že některé jazyky/knihovny indexují od 0, zatímco jiné od 1. A aby to nebylo až tak jednoduché, tak často bývá poslední parametr nepovinný - v případě neuvedení se vrací zbytek textu až do jeho konce.

BSL, alespoň podle vašich příkladů, bude verze indexující od 0 (první příklad má první parametr 1, přesto vrací druhý znak. Poslední příklad má index 0, vrací první znak), kde druhý parametr je index znaku, který už to vracet nemá. Tedy verze 3 na mnou uvedeném seznamu. Ve druhém příkladu chybí poslední parametr a ve výsledku se objeví podřetězec od druhého znaku celý. Tedy funkce v případě chybějícího třetího parametru zjevně vrací celý zbytek textu.

Použití bude tedy snadné. Jako první parametr uvedete text, ze kterého chcete vybírat. Tedy třebas to "Apple". Dále musíte vědět, co chcete. Řekněme, že chcete druhý až čtvrtý znak. Pak další dva parametry budou 1 a 4. Obecně, pokud chcete znaky N až M, tak parametry budou:
(substring "Apple" N-1 M)
Pokud chete celý zbytek textu od znaku N až do konce, pak:
(substring "Aplle" N-1)
To N-1 je tam proto, že BSL zjevně indexuje od 0. Tedy první znak je 0, druhý znak je 1 atd. Od M neodečítáte nic, protože BSL zjevně nečeká index posledního znaku, který chcete, ale index prvního, který už nechcete (teoreticky vzato by bylo nejsprávnější psát M-1+1, ale za to by vás nikdo nepochválil).