Lyubuyu informasiyu mojno predstavit simvolnыmi vыrajeniyami. V kachestve osnovnыx vidov simvolnыx vыrajeniy vыbranы spiski i atomы. Atom - nedelimoye dannoye, predstavlyayuщyeye informasiyu proizvolnoy prirodы. No vo mnogix sluchayax znaniye prirodы informasii dayet boleye chetkoye ponimaniye osobennostey izuchayemыx mexanizmov.
Programmirovaniye rabotы s chislami i strokami – privыchnaya, xorosho osvoyennaya oblast informasionnoy obrabotki, udobnaya dlya osenki preimuщyestv ispolzovaniya funksionalov. Opuskaya texnicheskiye podrobnosti, prosto otmetim, chto chisla i stroki rassmatrivayutsya kak samoopredelimыye atomы, smыsl kotorыx ne trebuyet nikakogo assosiirovaniya, on ponyaten prosto po vidu zapisi. Naprimer, naturalnыye chisla zapisыvayutsya bez osobennostey i mogut bыt pochti proizvolnoy dlinы:
1
-123
9876543210000000000000123456789
Mojno rabotat s drobnыmi i veщyestvennыmi chislami:
8/12 ;= 2/3
3.1415926
Stroki zaklyuchayutsya v obыchnыye dvoynыye kavыchki:
"stroka lyuboy dlinы, iz proizvolnыx simvolov, vklyuchaya vse chto ugodno"
So strokami mojno pri neobxodimosti rabotat posimvolno, xotya oni rassmatrivayutsya kak atomы.
(string-equal "stroka 1" " stroka1");=Nil
(ATOM "a+b-c") ;= T
(char "str1" 4 ) ;= "1"
Spisok - sostavnoye dannoye, pervыy element kotorogo mojet rassmatrivatsya kak funksiya, primenyayemaya k ostalnыm elementam, takje predstavlennыm kak simvolnыye vыrajeniya.
Eto otnositsya i k operasiyam nad chislami i strokami.
Bolshinstvo operasiy nad chislami pri prefiksnoy zapisi yestestvenno rassmatrivat kak multioperasii ot proizvolnogo chisla argumentov.
(+ 1 2 3 4 5 6) ;= 21
(- 12 6 3) ;= 3
(/ 3 5) ;= 3/5
Lyuboye dannoye mojno prevratit v konstantu, postaviv pered nim "'" apostrof. Eto ekvivalentno zapisi so spesialnoy funksiyey "QUOTE". Dlya chisel i strok v etom net neobxodimosti, no eto ne zapreщyeno:
'1 ;= 1
'"abc" ;= "abc"
Otkaz ot baryera mejdu predstavleniyami funksiy i znacheniy dayet vozmojnost simvolnыye vыrajeniya ispolzovat kak dlya izobrajeniya zadannыx znacheniy, vklyuchaya lyubыye strukturы nad chislami i strokami, tak i dlya opredeleniya funksiy, obrabatыvayuщix lyubыye dannыye. (Napominayem, chto opredeleniye funksii - dannoye.)
Funksionalы - eto funksii, kotorыye ispolzuyut v kachestve argumentov ili rezultatov drugiye funksii. Pri postroyenii funksionalov peremennыye mogut vыpolnyat rol imen funksiy, opredeleniya kotorыx naxodyatsya vo vneshnix formulax, ispolzuyuщix funksionalы.
Bazovыye fuknsii nad chislami
|
(= Chislo … )
|
Istina, yesli raznisa mejdu lyubыmi dvumya argumentami ravna nulyu
|
(/= Chislo … )
|
Istina, yesli nikakiye dva argumenta ne ravnы mejdu soboy
|
(> Chislo … )
|
Istina, yesli kajdыy argument prevыshayet preshestvennika
|
(< Chislo … )
|
Istina, yesli kajdыy argument menshe preshestvennika
|
(<= Chislo … )
|
Istina, yesli kajdыy argument menshe ili raven preshestvenniku
|
(>= Chislo … )
|
Istina, yesli kajdыy argument prevыshayet ili raven preshestvenniku
|
(* Chislo … )
|
Proizvedeniye proizvolnogo chisla argumentov. 1 pri ix otsutstvii.
|
(+ Chislo … )
|
Summa proizvolnogo chisla argumentov. 0 pri ix otsutstvii.
|
(- Chislo … )
|
Ekvivalentno rasstanovke minusov mejdu argumentami, t.ye. (- a b c ) = a – b – c
|
(/ Chislo … )
|
Pervoye chislo delitsya na proizvedeniye ostalnыx, sredi kotorыx ne doljno bыt nulya.
|
(1+ Chislo )
|
( + Chislo 1)
|
(1- Chislo )
|
( - Chislo 1)
|
(Boole Operasiya Seloye1 Seloye2 )
|
Vыchislyayet rezultat primeneiya pobitovoy Operasii k dvum Selыm.
|
(Gcd Chislo …)
|
Naibolshiy obщiy delitel. Nol bez argumentov.
|
(Lcm Chislo … )
|
Naimensheye obщyeye proizvedeniye, 1 pri otsutstvii argumentov.
|
(min Chislo …)
|
|
(max Chislo …)
|
| 1.2.6.2. Funksionalы. Rassmotrim texniku ispolzovaniya funksionalov i nametim, kak ot prostыx zadach pereyti k boleye slojnыm. Programma 2. Dlya kajdogo chisla iz zadannogo spiska poluchit sleduyuщyeye za nim chislo i vse rezultatы sobrat v spisok.
(defun next (xl) ; Sleduyuщiye chisla:
(cond ; poka spisok ne pust
(xl (cons (1+ (car xl)) ; pribavlyayem 1 k yego golove
(next (cdr xl)) ; i perexodim k ostalnыm,
) ) ) ) ; sobiraya rezultatы v spisok
(next '(1 2 5 )) ; = (2 3 6 )
Programma 3. Postroit spisok iz "golov" elementov spiska
(defun 1st (xl) ; "golovы" elementov = CAR
(cond ; poka spisok ne pust
(xl (cons (caar xl) ; vыbirayem CAR ot yego golovы
(1st (cdr xl)) ; i perexodim k ostalnыm,
) ) ) ) ; sobiraya rezultatы v spisok
(1st '((odin dva )(one two )(1 2 )) ) ; = (odin one 1)
Programma 4. Vыyasnit dlinы elementov spiska
(defun lens (xl) ; Dlinы elementov
(cond ; Poka spisok ne pust
(xl (cons (length (car xl)); vыchislyayem dlinu yego golovы
(lens (cdr xl)) ; i perexodim k ostalnыm,
) ) ) ) ; sobiraya rezultatы v spisok
(lens '((1 2 ) () (a b c d ) (1 (a b c d ) 3 )) ) ; = (2 0 4 3 )
Do'stlaringiz bilan baham: |