english version while1 - stránky o programování

LISP

Jazyk

LISP - LISt Processor. LISP je jazyk pro logické programování. Roku 1960 navrhl J. McCarthy jazyk LISP jako jazyk určený pro umělou inteligenci. Dodnes jeden z nejpoužívanějších jazyků pro UI, zejména v USA. Pro zvýšení rychlosti zpracování byly navrženy i speciální "LISPovské" procesory a počítače.

Jedním z pěkných programů LISPu je interpret PROLOGU...

Odkazy

Několik funkcí v LISPU (XLISP) ze semináře IZU - Základy umělé inteligence.

  • sum_g součet prvků lineárního seznamu
  • monot_up test na neklesající posloupnost
  • monot_down test na nerostoucí posloupnost
  • monot test na neklesající nebo nerostoucí posloupnost
  • list_g spojovací funkce pro reverzi
  • reverse_g reverze obecného seznamu
  • sum_x vektorový součet prvků dvou lineárních seznamů
  • sum_m součet dvou matic
  • radek vrací hodnotu index-tého prvku seznamu
  • pole vrací hodnotu prvku matice na souřadnicích [x,y]
  • mult_xy vektorový součin prvků řádku mx1 a sloupce mx2
  • mult_radek roznásobí jeden řádek mx1 s celou druhou matici mx2
  • mult_m nasobení dvou matic
sum_g + soucet prvku linearniho seznamu
(defun sum_g(sequence) (cond ( (null sequence) 0 ) ( T (+ (car sequence) (sum_g (cdr sequence)) ) ) ) )
Přejdi na seznam funkcí
monot_up + podfunkce pro funkci monot + test na neklesajici posloupnost prvku linearniho seznamu
(defun monot_up(sequence) ( cond ( (null sequence) nil ) ( (null (cdr sequence)) T ) ( (<=(car sequence)(cadr sequence))(monot_up (cdr sequence))) ) )
Přejdi na seznam funkcí
monot_down + podfunkce pro funkci monot + test na nerostouci posloupnost prvku linearniho seznamu
(defun monot_down(sequence) ( cond ( (null sequence) nil ) ( (null (cdr sequence)) T ) ( (>=(car sequence)(cadr sequence))(monot_down (cdr sequence))) ) )
Přejdi na seznam funkcí
monot + test na neklesajici nebo nerostouci posloupnost prvku linearniho seznamu + podle parametru rising : rising == 0 ... pro nerostouci rising != 0 ... pro neklesajici
(defun monot (rising sequence) ( cond ( (zerop rising) (monot_down sequence) ) ( T (monot_up sequence) ) ) )
Přejdi na seznam funkcí
list_g + spojovaci funkce pro reverzi
(defun list_g(L1 L2) (cond ( (and (null L1)(atom L2)) (list L2) ) ( (null L1) L2 ) ( (and (atom L1)(atom L2)) (append (list L1) (list L2)) ) ( (atom L1) (append (list L1) L2 ) ) ( (atom L2) (append L1 (list L2)) ) (T (cons (car L1) (list_g (cdr L1) L2)) ) ) )
Přejdi na seznam funkcí
reverse_g + reverze obecneho seznamu
(defun reverse_g(sequence) ( cond ( (null sequence) nil ) ( (atom (car sequence)) ( list_g (reverse_g (cdr sequence)) (car sequence) )) ( T ( append (reverse_g (cdr sequence)) (list (reverse_g (car sequence))) )) ) )
Přejdi na seznam funkcí
sum_x + vektorovy soucet prvku dvou linearnich seznamu
(defun sum_x(mx1 mx2) (cond ( (or (null mx1)(null mx2)) nil ) ( (null (cdr mx1)) (list (+ (car mx1)(car mx2)) ) ) ( T (cons (+ (car mx1)(car mx2)) (sum_x (cdr mx1)(cdr mx2)) ) ) ) )
Přejdi na seznam funkcí
sum_m + soucet dvou matic pres vektorove soucty radku sum_x
(defun sum_m (width1 height1 width2 height2 matrix1 matrix2) (cond ( (or (null matrix1)(null matrix2)) nil ) ( (null (cdr matrix1)) (list (sum_x (car matrix1)(car matrix2)) ) ) ( T (cons (sum_x (car matrix1)(car matrix2)) (sum_m 1 1 1 1 (cdr matrix1)(cdr matrix2)) ) ) ) )
Přejdi na seznam funkcí
radek + vraci hodnotu index-teho prvku seznamu nebo nil pokud je index mimo meze (> delka seznamu)
(defun radek (index sequence) (cond ( (null sequence) nil ) ( (zerop index) (car sequence) ) ( T (radek (- index 1) (cdr sequence)) ) ) )
Přejdi na seznam funkcí
pole + vraci hodnotu prvku matice na souradnicich [x,y] (od 0..n) nebo nil pokud je index mimo meze (> rozmery matice) 0 1 x +-------> '((1 2) (3 4)) 0 | (1 2) 1 | (3 4) y | v
(defun pole (x y sequence) (cond ( (null sequence) nil ) ( (zerop y) (radek x (car sequence)) ) ( T (pole x (- y 1) (cdr sequence)) ) ) )
Přejdi na seznam funkcí
mult_xy + vektorovy soucin prvku radku mx1 a sloupce mx2 + n je delka radu mx1 a zaroven delka sloupce mx2 (tj. sirka mx1 a vyska mx2) + y1 cislo radku mx1 + x2 cislo sloupce mx2 + x1 a y2 nastavit na 0 == cislovani od 0 indexu pr: ( mult_xy 0 0 0 0 3 '((1 2 3)) '((4) (5) (6)) ) | 1 2 3 | | 4 | * | 5 | | 6 | 1*4 + 2*5 + 3*6 = 32
(defun mult_xy (x1 y1 x2 y2 n mx1 mx2) (cond ( (= n 1) (* (pole x1 y1 mx1) (pole x2 y2 mx2) ) ) ( T (+ (* (pole x1 y1 mx1) (pole x2 y2 mx2) ) (mult_xy (+ x1 1) y1 x2 (+ y2 1) (- n 1) mx1 mx2) ) ) ) )
Přejdi na seznam funkcí
mult_radek + roznasobi jeden radek mx1 s celou druhou matici mx2 + vraci seznam - jeden radek vysledne matice y1 .. index radku mx1 (od 0) x2 .. sirka matice mx2 y2 .. vyska matice mx2 (mult_radek 1 2 3 '((2 3 4)(3 4 5)) '((1 2) (3 4) (5 6)) ) '((3*1 + 4*3 + 5*5) (3*2 + 4*4 + 5*6)) '(40 52)
(defun mult_radek ( y1 x2 y2 mx1 mx2 ) (cond ( (= x2 1) (list (mult_xy 0 y1 (- x2 1) 0 y2 mx1 mx2)) ) ( T (append (mult_radek y1 (- x2 1) y2 mx1 mx2) (list (mult_xy 0 y1 (- x2 1) 0 y2 mx1 mx2)) ) ) ) )
Přejdi na seznam funkcí
mult_m + nasobeni dvou matic
(defun mult_m (width1 height1 width2 height2 matrix1 matrix2) (cond ( (= height1 1) (list (mult_radek (- height1 1) width2 height2 matrix1 matrix2)) ) ( T (append (mult_m width1 (- height1 1) width2 height2 matrix1 matrix2) (list (mult_radek (- height1 1) width2 height2 matrix1 matrix2)) ) ) ) )
Přejdi na seznam funkcí
Kontakt
Prohlášení o dostupnosti
Tisk stránky
Autor: Václav Bubník © 2005
vbubnik@post.cz
XHTML 1.0| CSS