Nejste přihlášen/a.

Přihlásit se do poradny

 

Význam kódu pro Arduino

Od: ludvik odpovědí: 4 změna:

Zdravím všechnt.

Není tu prosím někdo, kdo programuje v C++ a dokázal by mi vysvětlit, co dělají tyhle řády kódu pro Arduino? Závorky to ukazuje divně, tak přikládám i obrázek kódu.

Děkuju.

void loop()
{
let
fun f [] = [] * toto jsou levá a prává hranatá závorka
|f(p::ps) =
if p.name.lenght()>5 then p.name.to_upper()::(f ps)
else(f ps)
in
sort(f(people))

}


Význam kódu pro Arduino

 

 

4 odpovědi na otázku
Řazeno dle hodnocení

 

 

hodnocení

2x
avatar vikos

Zdravím. S Arduinem sice nedělám ale zkusil jsem dát do ChatGPT, který v tomto má výsledky relativně správné a přikládám celou odpověď. Snad pomůže

Vysvětlení krok za krokem:

1. void loop()

Funkce loop() je základní funkce v Arduinu, která se spouští opakovaně po celou dobu běhu programu. To znamená, že vše, co je uvnitř funkce loop(), se bude opakovat neustále.

2. let

Toto klíčové slovo v jazyce C++ nebo Arduinu neexistuje. V některých funkcionálních jazycích se používá pro deklarování funkcí nebo proměnných.

Zde zřejmě má být definována funkce f, která bude rekurzivně procházet seznam.

3. Definice funkce f: fun f [] = []

fun f [] = [] je také syntaxe z funkcionálních jazyků, nikoliv C++. Tady je záměr:

f je funkce, která bere seznam jako vstup.

[] znamená prázdný seznam. Pokud je seznam prázdný, funkce vrátí také prázdný seznam.

V C++ (Arduino) neexistuje tento zápis rekurzivní funkce, proto by musel být přepsán.

4. Druhá část definice: | f(p::ps)

Tento zápis f(p::ps) je další syntaxe typická pro funkcionální jazyky. Co to znamená:

p::ps říká, že vezmeme první prvek seznamu (hlavu, p) a zbytek seznamu (ocas, ps).

Operátor :: se používá k přidání prvku na začátek seznamu.

Opět, toto je syntaxe funkcionálních jazyků a v C++ se to musí přepsat na práci s poli nebo vektory.

5. Podmínka: if p.name.length() > 5

Tady kontrolujeme délku jména osoby:

p.name.length() > 5: Kontrola, zda délka jména osoby je větší než 5 znaků.

p.name by měl být řetězec, což by mělo být v pořádku v Arduinu, kde String má metodu length().

6. Konverze na velká písmena: p.name.to_upper()

Pokud je délka jména větší než 5 znaků, funkce to_upper() převede jméno na velká písmena.

V Arduinu existuje metoda toUpperCase() pro objekty typu String, takže p.name.toUpperCase() by bylo správné.

7. Rekurzivní volání: f ps

Tady se funkce f volá znovu na zbytek seznamu (ps). To je rekurzivní volání, které prochází celý seznam.

Pokud délka jména je větší než 5 znaků, přidá jméno (ve velkých písmenech) na začátek seznamu a volá se znovu na zbytek seznamu.

Pokud není, volá se f ps bez úpravy jména.

8. in sort(f(people))

Tato část naznačuje, že se volá funkce f s argumentem people (předpokládám, že people je seznam lidí).

Výsledek této funkce se pak předá do funkce sort, která se pokusí seznam setřídit.

V C++ by sort() mohlo odkazovat na funkci pro třídění z knihovny <algorithm>, ale opět by bylo potřeba přepsat syntaxi.

Shrnutí:

Kód se snaží provést tyto operace:

Projít seznam osob (people) a pro každého člověka:

Pokud má jeho jméno více než 5 znaků, převést ho na velká písmena.

Vytvořit nový seznam lidí s jmény delšími než 5 znaků (převedených na velká písmena).

Seřadit výsledný seznam podle abecedy.

ludvik
hodnocení

Dík.

To mě nenapadlo, zpřáhnout umělou inteligenci. Rozumím a nerozumím. Asi rozumím vysvětlení té funkce kódu. A všem těm poznámkám o tom, že to není C++ rozumím tak, že v Arduinu je to "prohnáno" nějakou" knihovnou, a že nevím jakou. Někde mi k tomu vypadl asi nějaký info soubor. Tak jdu hledat dál.

kdosi

Spíš mi to přijde jako nějaký vtip, nebo tak, když syntaxe nesedí a nemá to žádné vstupy ani výstupy (jen se to volá pořád dokola, protože loop)

Odkud to pochází, co by to mělo jako dělat a co si od toho slibujete?

 

hodnocení

0x

To nie je C++. Vyzerá to ako nejaký derivát funkcionálneho jazyka ML.

Funkcia f - asi - spracováva nejaký zoznam. Ak je v zozname prvok s menom dlhším ako 5, tak ho zmení na VEĽKÉ PÍSMENA. V poslednom riadku to spracuje zoznam people funkciou f a následne sa na výsledok použije funkcia sort.

Udajte zdroj, možno Vám k tomu ešte niečo napíšem.

 

 


 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz.

Používáním poradny vyjadřujete souhlas s personifikovanou reklamou, která pomáhá financovat tento server, děkujeme.

Copyright © 2004-2025 Poradna Poradte.cz. Všechna práva vyhrazena. Prohlášení o ochraně osobních údajů. | [tmavý motiv]