Šioje serijoje kalbėsiu su jumis apie LISP programavimą BricsCAD. Šis tinklaraščio įrašas paaiškins, ką reikia žinoti norint tapti labai produktyviu programuotoju. Pirmuose dviejuose ar trijuose pranešimuose supažindinsiu jus su terminija, sintakse ir duomenų tipais.

Kas yra LISP programavimas?

LISP (LISt Papipjaustymas) BricsCAD yra lengvai mokoma programavimo kalba ne programuotojui. Programavimas yra tiesiog protingas duomenų gavimas, naudojimas ir (arba) pakartotinis naudojimas.

Terminija ir duomenų tipai

Tai yra keli įprasti terminai, kurie privers jus eiti teisinga linkme. Jūs pastebėsite, kad srautas šiek tiek vystosi, kai mes einame link terminų sąrašo. Atminkite, kad visa tai yra labai logiška. Nėra jokių gudrybių. Tai logiška. Daiktai kiekvieną kartą veikia taip pat. Tai logiška. Visada taip pat. Ar aš minėjau, kad tai logiška?

Terminija

  • Sąrašas Viskas, kas yra skliausteliuose ()
  • Atomas Atskiri elementai sąraše
  • Funkcija LISP „komandos“, paprastai pirmasis atomas sąraše
  • Argumentas Atomai, einantys po funkcijos pavadinimo. Tai yra duomenys, kuriuos jūsų naudojama funkcija turi atlikti atlikdama užduotį.
  • Išraiška Sąrašas, kuriame yra funkcija ir galbūt argumentai

Duomenų tipai

  • Sveikieji skaičiai Sveikuosius skaičius be dešimtainio taško
  • Realybės Slankiojo kablelio skaičiai, visada turi dešimtainį tašką
  • Stygos Tekstas, visada esantis kabutėse: „Kaip tai“
  • Sąrašai Gali neatrodyti logiška, kad tą patį terminą vartojame du kartus, tačiau jis bus paaiškintas!

Parengiamasis darbas praktikuojant

Prieš praktikuojant funkcijų naudojimą komandinėje eilutėje, naudinga išjungti „Dynamic Input“ nuostatą. Išjunkite (išjunkite), naudodami būsenos juostą „BricsCAD“:

dinaminis įvesties bricscad

Taip pat - gera idėja, kad komandų eilutės sritis parodytų kelias eilutes „aukštesnes“ nei įprasta - gal 8 ar 10 eilučių. Norėdami atlikti jo užveskite pelės žymeklį virš komandos eilutės krašto, kol pasirodys dviguba rodyklė, spustelėkite ir vilkite, kad pakeistumėte komandos eilutės aukštį:

„lisp“ nustatymai komandų eilutės juostoje „bricscad“

Pagrindinė sintaksė

(funkcijos vardo argumentas1 argumentas2 ...)

Pagrindinis sąrašų, su kuriais mes dirbsime, tipai gali būti vadinami išraiškomis. Išraiška yra sąrašas, kuris visada pasirenka aukščiau nurodytą formatą. Pirmasis išraiškos elementas (arba atomas) visada yra funkcija. Papildomi atomai sąraše minimi kaip argumentai. Argumentai yra įrankiai arba „daiktai“, kuriuos funkcija turi tinkamai atlikti. Argumentai, kurie mūsų tikslams yra perduodami funkcijai, turi būti vieno iš 4 duomenų tipų: sveikasis skaičius, tikrasis, eilutė ar sąrašas.

Su matematika susijusios funkcijos

Šios paprastos funkcijos padeda mums suprasti, kaip sintaksė ir anksčiau išvardyti terminai veikia kartu. Paprastas, trumpas funkcijas galima įvesti tiesiai į komandų eilutę. Tai labai palengvina testavimą ir trikčių šalinimą (ir pradinį mokymąsi !!).

Nesivaržykite rašyti kai kurių dalykų, kuriuos pristatau, tuo pačiu eidami ...

(+ numeriai…)

Papildymo funkcija (+) imasi bet kokio skaičiaus argumentų, juos sudėjus ir grąžina sumą.

(- num num…)

Atimties funkcija (-) užima bet kokį skaičių skaičių argumentų. Pirmuoju argumentu galima laikyti bazinį skaičių. Visi papildomi argumentai paeiliui atimami iš šio pagrindinio argumento.

(* num num…)

Daugybos funkcija (*) imasi bet kokio skaičiaus argumentų, padaugina juos iš vienetų ir grąžina produktą.

(/ num num…)

Dalymo funkcija (/) užima bet kokį skaičių skaičių argumentų. Pirmuoju argumentu galima laikyti bazinį skaičių. Bazinis skaičius paeiliui padalijamas iš kiekvieno papildomo argumento.

Matematikos taisyklės:

  • Norėdami naudoti neigiamą skaičių, priešais jį tiesiog įdėkite minuso ženklą. (Pasirinktinai, priešais teigiamus skaičius gali būti pliusas, bet tai labai retai).
    -3.75, -42, +6.953
  • Realieji skaičiai mažesni nei 1 ir didesni kaip -1 privalo prieš skaitmenį po kablelio pažymėkite nulį (0). 125, 0,5, -0,67
  • Jei visi argumentai, perduoti matematikos funkcijai yra sveikieji skaičiai, bus grąžintas sveikasis skaičius. Jei bent jau vienas iš argumentų yra tikrasis skaičius, grąžinamas tikrasis skaičius.
  • Realieji skaičiai saugomi tiksliai iki daugiau nei 15 dešimtųjų tikslumu, bet „grąžinami“ (rodomi komandų eilutėje) ne daugiau kaip 15 reikšminių skaitmenų.

Į komandos eilutę įvestų matematikos funkcijų pavyzdžiai:

matematikos LISP funkcijos komandinėje eilutėje

Duomenų saugojimas

Galimybė atlikti visas šias matematikos funkcijas yra puiku, tačiau nėra labai naudinga, jei neišsaugosime vertybių. Funkcija (setq) leidžia mums išsaugoti reikšmę ar duomenis kintamajame ar simbolyje.

(nustatyta reikšmė)

Funkcijai „setq“ reikia lygių argumentų. Nelyginiai sunumeruoti argumentai yra simboliai, o lyginiai numeriai yra reikšmės, kurios turi būti saugomos tame simbolyje. Mokymosi ir paprastumo sumetimais naudosime (setq) tik su dviem argumentais; simbolis ir vertė, kurią jis išlaikys. Simbolis gali būti bet koks įvestas simbolis, bet ne tiesiog skaičius. (Skaičius jau turi vertę!) Kai kurie kiti simboliai taip pat negalioja, pvz., +, -, *, /, (,) ar bet koks funkcijos pavadinimas, jau apibrėžtas LISP ... šie simboliai jau turi reikšmes ar reikšmę LISP. Galiojančių simbolių pavyzdžiai:

A B X PT PT1 PT2 MIDPT CNTRPT CLR1 PAVADINIMO PAVADINIMAS DWGNUM

Kai kurioms duomenų rūšims, apie kurias minėjome anksčiau, galime naudoti funkciją (setq):

(rinkinys A 1) grąžina 1
(„setq B 2.5“) grąžina 2.5
(„setq C“ BricsCAD LISP “) grąžina „BricsCAD LISP“
(„setq X 1.25 Y“ 6.375 Z 0.0) grąžina 0.0
(setq CPT 3.5
OPT „Skersmuo“
RAD 4.0
)
grąžina 4.0

Paskutinės dvi išraiškos yra tinkamas kodavimo būdas, tačiau ne dažnai naudojamas. Tai gali šiek tiek painioti trikčių šalinimą, kodo pridėjimą ir (arba) ištrynimą.

Antrame ir paskutiniame pavyzdyje atrodo, kad X ir Y nebuvo „nustatyti“, o paskutiniame pavyzdyje paaiškėjo, kad CPT ir OPT negavo „nustatyto“. Bet tarp dviejų pavyzdžių visi 6 simboliai iš tikrųjų buvo „sudėti“. Funkcija (setq) grąžina paskutiniojo argumento vertinimo rezultatai jam perduoti. 

Lizdinė ekspresija

Ankstesnę kodo seką galima būtų vadinti „kietuoju kodavimu“. Vertėms, kurias simboliai laiko, neleidžiama skirtis (X yra absoliučiai „1“, niekada nieko kito!). Jie visada bus tiksliai tokie, kokie pavaizduoti - simbolis turi bet kokią vertę, kurią programuotojas įvedė kaip antrą argumentą. Nėra jokio atlygio už vartotojo įvestą informaciją.

LISP turi funkciją, leidžiančią išraiškas įterpti į kitas išraiškas. Norėdami pradėti, funkcijos, kurias mes įterpsime į funkciją (setq), bus funkcijos, leidžiančios mums gauti tam tikrus duomenų tipus iš mūsų programų vartotojų.

Pirmiausia apžvelgsime keletą duomenų tipų rinkimo funkcijų, o po to jas įdėsime (setq), kad būtų išsaugotos jų vertės. 

Specifinių duomenų gavimas - pagal duomenų tipą

Anksčiau minėjome, kad LISP priklauso nuo tinkamo tam tikrų tipų duomenų naudojimo. Mes paminėjome 4 konkrečius duomenų tipus: sveikuosius skaičius, tikruosius skaičius, eilutes ir sąrašus. LISP teikia funkcijas, skirtas specialiai leisti programuotojui, leisti programos vartotojui įvesti reikšmes, kurios prireikus gali skirtis.

 

(getint  str)

Leidžia vartotojui įvesti sveikąją skaičių.

Pasirinktinai leidžia eilutės argumentą naudoti kaip raginimą. Gauna įvesties vertę kaip sveikasis skaičius.

 

(getreal  str)

Leidžia vartotojui įvesti tikrąją arba slankiojo kablelio vertę.

Pasirinktinai leidžia eilutės argumentą naudoti kaip raginimą. Gauna įvesties vertę kaip a tikras skaičius.

 

(susirenka  vėliavos str)

Leidžia vartotojui įvesti sveikąją skaičių.

Pasirinktinai leidžia eilutės argumentą naudoti kaip raginimą. Taip pat leidžia pasirenkamąjį argumentą, kad jei „turi reikšmę“, įvesties eilutėje galima įtraukti tarpus. Gauna įvesties eilutę kaip a eilutė.

 

(gauti tašką  pt str)

Leidžia vartotojui įvesti taško vertę.

Pasirinktinai leidžia eilutės argumentą naudoti kaip raginimą. Taip pat pasirenkamas „pradžios“ taško argumentas. Gauna įvesties tašką kaip a sąrašą.

 

Tai tik šiek tiek sudėtinga interpretuoti, bet kai supratau, tai išties logiška!

Tas paskutinis sakinys yra raktas norint suprasti ankstesnes diskusijas apie duomenų tipus. Minėjome, kad yra 4 pagrindiniai duomenų tipai ir akivaizdu, kad pirmosios 3 iš šių funkcijų tvarko pirmuosius 3 duomenų tipus, kuriuos minėjome. Paskutinė funkcija yra (gauti tašką) - ir nėra duomenų tipo, vadinamo „tašku“. Mes paminėjome, kad yra duomenų tipas, vadinamas „sąrašu“. Paaiškinti ... Mes minėjome, kad sąrašas yra viskas, esanti skliaustuose. Mes taip pat minėjome, kad išraiška yra specifinis sąrašo tipas - toks, kuris funkcionuoja kaip pirmasis sąrašo atomas, o bet kokie papildomi atomai vadinami argumentais. Funkcija (gavimo taškas) pateikia „tik“ sąrašą - ne tokią išraišką, kaip visi sąrašai, su kuriais mes kalbėjome iki šiol. Sąrašą, kurį grąžina ši funkcija, sudaro trys atomai. Visi trys atomai yra „tikrojo“ tipo. Pirmasis atomas yra taško X vertė, antrasis yra Y reikšmė, o trečiasis yra Z. Taigi (gavimo taškas) grąžina sąrašą, ir jis dažnai konkrečiai vadinamas „taškų sąrašu“. Norint suprasti, kaip veikia LISP kalba, svarbu suprasti šios pastraipos logiką!

Išsaugotų duomenų naudojimas

Surinkus duomenis iš vartotojo, įprasta naudoti šiuos duomenis objektams pridėti prie brėžinio arba modifikuoti esamus piešinio objektus. Kol kas panaudosime saugomus duomenis kai kuriems objektams piešti.

Funkcija (komanda) yra vienas iš būdų, kaip programuotojas gali pridėti ar modifikuoti objektus brėžinyje.

(komanda stygos argumentas ...)

Pirmasis (komandos) argumentas bus komandos pavadinimas. Jis visada išreiškiamas styga. Papildomų argumentų skaičius ir jų duomenų tipas priklauso nuo to, kokia komanda naudojama. Tai paaiškės kitame (ir galutiniame šiam kartui!) Skyriuje.

Sudėkite viską kartu

Būsime daug giliau nagrinėdami šias funkcijas ir sąvokas būsimuose pranešimuose, tačiau kol kas komandinėje eilutėje įvesime keletą kodo eilučių, kad visa tai susietume. Įveskite šias kodo eilutes tiesiai į komandų eilutę. Jei kas nors nutinka ne taip, tiesiog paspauskite pabėgimo klavišą ir dar kartą įveskite kodo eilutę.

(setq CPT (taškas „Pasirinkite centrinį tašką:“))
(setq RAD (getreal „Įveskite spindulį:“))
(„setq OFF“ (gauti realų „Įveskite poslinkio vertę:“))
(„setq NEWRAD“ (+ RAD OFF))
(komanda „apskritimas“ CPT RAD)
(komanda „apskritimas“ CPT NEWRAD)

Aukščiau, mes turime programos brėžinius! Kitame įraše išmoksime, kaip išsaugoti šias kodo eilutes tekstiniame faile, kad mums nebereikėtų jų rašyti komandų eilutėje kiekvieną kartą, kai norime nubrėžti poslinkio ratą. (Ir, be abejo, mes imsimės savo naujų žinių dar giliau, nei tiesiog nupieškite porą ratų!)

Autoriaus pastaba:

Kartais mano įrašai gali atrodyti persidengiantys ir (arba) pasikartojantys LISP įrašai šiame dienoraštyje pateikė Ralph Grabowski. Daugybę metų mėgau Ralfo straipsnius iš įvairių šaltinių. Kaip skaitytojas, manau, jums patiks pamatyti panašią medžiagą, pateiktą šiek tiek skirtingai - ji gali padėti geriau suprasti temas.