Funkce pro práci s funkcemi

(apply 'function list)
 
Argumenty:
 
'function
- funkce, argument může být symbol defun nebo lambda výraz
 
list
- seznam, může být i nil, když funkce nemá žádný argument
 
Popis:
  - použije funkci 'function na seznam
 
Návratová hodnota:
  - výsledek volání funkce
 
Příklady:
  (apply '+ '(1 2 3))
    vrací 6
  (apply 'strcat '("a" "b" "c"))
    vrací "abc"

(defun sym ([arguments] [/ variables...]) expr...)
 
Argumenty:
 
sym
- pojmenování funkce
 
arguments
- jména argumentů funkce
 
/ variables
- jména jedné nebo více lokálních proměnných funkce, pozor / musí být oddělen mezerou
 
expr
- libovolný výraz (posloupnost výrazů) AutoLISPu
 
Poznámka:
  - nejsou-li deklarovány žádné argumenty ani lokální proměnné musí se uvést prázdné závorky
  - v případě duplikované deklarace argumentu nebo jména funkce AutoLISP použije první a ignoruje ostatní deklarace
 
Popis:
  - definování funkce
 
Návratová hodnota:
  - výsledek posledního prováděného výrazu
 
Příklady:
  (defun myfunc (x y) ...)
    funkce se dvěma argumenty
  (defun myfunc (/ a b) ...)
    funkce se dvěmi lokálními proměnými
  (defun myfunc (x / t) ...)
    funkce s jedním argumentem a jednou lokální proměnnou
  (defun myfunc () ...)
    funkce bez argumentů a lokálních proměnných

(eval expr)
 
Argumenty:
 
expr
- výraz, který má být vyhodnocen
 
Popis:
  - zjistí výsledek AutoLISPovské funkce
 
Návratová hodnota:
  - výsledek vyhodnocení
 
Příklady:
  Nejprve nastavíme proměnné:
  (setq a 123)
  (setq b 'a)
  Vyhodnocení výrazů:
  (eval 4.0) vrací 4.0
  (eval (abs -10)) vrací 10
  (eval a) vrací 123
  (eval b) vrací 123

(function symbol | lambda-expr)
 
Argumenty:
 
symbol
- jméno funkce
 
lambda-expr
- výraz následujícího tvaru:
 
  (lambda argumenty {S-výraz}*)
 
Popis:
  - sdělí kompilátoru VisualLISPu, aby slinkoval a optimalizoval argument, jestliže je vestavěnou funkcí
 
Návratové hodnoty:
  - výsledek vyhodnocovaného výrazu
 
Příklady:
  Kompilátor Visual LISPu nedokáže optimalizovat čárkovaný lambda výraz v následujícím kódu:
(mapcar
'(lambda (x) (* x x))
'(1 2 3))
   
  aby mohl kompilátor Visual LISPu optimalizovat lambda výraz, musíte přidat do kódu funkci function:
    (mapcar
    (function (lambda (x) (* x x)))
    '(1 2 3))

(lambda arguments expr...)
 
Argumenty:
 
arguments
- argumenty předané výrazu
 
expr
- výraz AutoLISPu
 
Popis:
  - definice anonymní funkce
 
Poznámka:
  - používá se když není potřeba definovat funkci (pomocí defun)
  - umožňuje umístit funkci na místo použití
  - často se používá ve spojení s funkcemi apply a/nebo mapcar
 
Návratová hodnota:
  - hodnota poslední expr
 
Příklady:
  Použití lambda funkce v konzole Visual LISPu:
    _$ (apply '(lambda (x y z)
    (* x (- y z))
    )
    '(5 20 14)
    )
        vrací 30  
 
    _$ (setq counter 0)
    (mapcar '(lambda (x)
    (setq counter (1+ counter))
    (* x 5)
    )
    '(2 4 -6 10.2)
    )
        vrací (10 20 -30 51.0)

(progn [expr]...)
 
Argumenty:
 
expr
- jeden nebo víc AutoLISP výrazů
 
Popis:
  - vyhodnocuje každý výraz sekvenčně a vrací hodnotu posledního výrazu
 
Poznámka:
  - používá se, když potřebujeme vypočítat více výrazů a je očekáván pouze jeden výraz
 
Návratová hodnota:
  - výsledek posledního výrazu
 
Příklady:
  Funkce if provede jeden výraz then v případě splnění podmínky, potřebujeme-li provést dva výrazy použijeme funkci progn:
    (if (= a b)
    (progn
    (princ "\nA = B ")
    (setq a (+ a 10) b (- b 10))
    )
    )

(trace [function...])
 
Argumenty:
 
function
- jméno funkce, není-li uvedeno nemá funkce trace žádný efekt
 
Popis:
  - pomůcka při ladění v AutoLISPu, nastaví flag pro specifikovanou funkci
  - když je specifikovaná funkce volaná - trace zobrazí informace o funkci a výsledek funkce
  - informace jsou zobrazeny do příkazové řádky AutoCADu nebo trace okna VisualLISPu
 
Poznámka:
  - na vypnutí flagu trace je nutné použít funkci untrace
 
Návratová hodnota:
  - jméno poslední funkce poslané trace
  - nil - neobsahuje-li funkce trace žádné argumenty
 
Příklady:
  Definujeme funkci se jménem foo a nastavíme trace flag pro tuto funkci
  (defun foo (x) (if (> x 0) (foo (1- x))))
  (trace foo)
  Vyvoláme funkci foo
    (foo 3)
  Entering (FOO 3)
    Entering (FOO 2)
    Entering (FOO 1)
    Entering (FOO 0)
  Result: nil
  Result: nil
  Result: nil
  Result: nil
     
  Vynulování trace flagu - zavoláme untrace
    (untrace foo)

(untrace [function...])
 
Argumenty:
 
function
- jméno funkce, není-li uvedeno nemá funkce trace žádný efekt
 
Popis:
  - vymaže trace flag specifikované funkce
 
Návratová hodnota:
  - jméno poslední funkce poslané untrace
  - nil - neobsahuje-li funkce untrace žádné argumenty
 
Příklady:
  Vymazání trace flagu u funkce foo
  (untrace foo)
    vrací FOO

(defun-q sym ([arguments] [/ variables...]) expr...)
 
Argumenty:
 
sym
- pojmenování funkce
 
arguments
- jména argumentů funkce
 
/ variables
- jména jednoho nebo více lokálních proměnných funkce, pozor / musí být oddělen mezerou
 
expr
- libovolný výraz (posloupnost výrazů) AutoLISPu
 
Poznámka:
  - AutoLISP obsahuje tuto funkci v důsledku zpětné kompatibility
  - nejsou-li deklarovány žádné argumenty ani lokální proměnné musí se uvést prázdné závorky
  - v případě duplikované deklarace argumentu nebo jména funkce AutoLISP použije první a ignoruje ostatní deklarace
 
Popis:
  - definování funkce jako seznam
 
Příklady:
  _$ (defun-q my-startup (x) (print (list x)))
    vrací MY-STARTUP
  _$ (my-startup 5)
    vrací (5) (5)
   
  Použití funkce defun-q-list-ref pro zobrazení struktury my-startup:
  _$ (defun-q-list-ref 'my-startup)
    vrací ((X) (PRINT (LIST X)))

Podívej se na defun-q-list-ref a defun-q-list-set.

(defun-q-list-ref 'function )
 
Argumenty:
 
'function
- jméno funkce
 
Popis:
  - funkce zobrazí strukturu funkce definované funkcí defun-q
 
Návratová hodnota:
  - seznamová definice funkce
  - nil - není-li argument seznam
Příklady:
  Definujeme funkci za použití defun-q funkce:
  _$ (defun-q my-startup (x) (print (list x)))
    vrací MY-STARTUP
   
  Použití funkce defun-q-list-ref pro zobrazení seznamové struktury my-startup:
  _$ (defun-q-list-ref 'my-startup)
    vrací ((X) (PRINT (LIST X)))

Podívej se na defun-q a defun-q-list-set.

(defun-q-list-set 'sym list)
 
Argumenty:
 
'sym
- jméno funkce
 
list
- seznam obsahující výrazy, které mají být vloženy do funkce
 
Popis:
  - vytvoří ze seznamu funkci
 
Návratová hodnota:
  - definici sym
 
Příklady:
  _$ (defun-q-list-set 'foo '((x) x))
    vrací FOO
  _$ (foo 3)
    vrací 3

(vl-acad-defun 'symbol)
 
Argumenty:
 
'symbol
- symbol identifikující funkci
 
Popis:
  - definuje funkci AutoLISPu jako externí subrutinu
  - pokud funkce nemá prefix c: a potřebujete, aby se dalo na funkci odkazovat z externí ObjectARX aplikace, můžete použít vl-acad-defun k vytvoření funkce přístupné
 
Návratová hodnota:
  - nespecifikována

(vl-acad-undefun 'symbol)
 
Argumenty:
 
'symbol
- symbol identifikující funkci
 
Popis:
  - ukončí definici funkce, když již není dále potřebná pro aplikaci ObjectARX
  - je možné použít vl-acad-undefun k ukončení c: funkce nebo funkce, která je definována pomocí vl-acad-defun
 
Návratové hodnoty:
  - T - vše proběhlo v pořádku
  - nil - došlo k chybě (například funkce není definována v AutoLISPu)

(vl-get-resource text-file)
 
Argumenty:
 
text-file
- jméno .txt souboru (bez koncovky) zabaleného ve VLX.
 
Popis:
  - vrátí text uložený v .txt souboru zabaleném ve VLX
 
Návratové hodnoty:
  - řetězec - obsahující text ze souboru .txt
 
Příklady:
  Předpokládejme, že soubor getres.vlx obsahuje program definující funkci print-readme a textový soubor readme.txt.
  Definice funkce print-readme je následující:
    (defun print-readme ()
    (princ (vl-get-resource "readme"))
    (princ)
    )
   
  Po nahrání funkce getres.vlx spustíme funkci print-readme:
    _$ (print-readme)
      vrací Zobrazí se nám obsah souboru readme.txt

(vlisp-compile 'mode filename [out-filename])
 
Argumenty:
 
'mode
- jeden z následujících módů:
 
 
st
- standardní mód
 
 
lsm
- optimalizovaný, linkuje nepřímo
 
 
lsa
- optimalizovaný, linkuje přímo
 
filename
- řetězec identifikující zdrojový soubor AutoLISPu
 
- v případě, že soubor leží ve vyhledávací cestě AutoCADu může být cesta vynechána
 
out-filename
- jméno výstupního souboru
 
- v případě vynechání, má výstupní soubor stejné jméno jako soubor vstupní (až na koncovku)
 
- v případě, že není uvedeno umístění výstupního souboru AutoCAD umístí soubor do adresáře, kde je nainstalován
 
Popis:
  - kompiluje zdrojový soubor AutoLISPu do souboru FaS
 
Pozor:
  - při spuštění funkce vlisp-compile musí být otevřeno IDE Visual LISPu
 
Návratové hodnoty:
  - T - kompilace byla dokončena v pořádku
  - nil - v opačném případě
 
Příklady:
  Předpokládejme, že soubor yinyang.lsp je umístěn v adresáři, který je vidět z vyhledávací cesty AutoCADu.
  Příkaz pro zkompilování programu má následující tvar:
  _$ (vlisp-compile 'st "yinyang.lsp")
    vrací T
    Výstupní soubor bude pojmenován yinyang.fas a bude umístěn do stejného adresáře jako zdrojový soubor.
   
  Příkaz pro zkompilování programu do souboru GoodKarma.fas má následující tvar:
  (vlisp-compile 'st "yinyang.lsp" "GoodKarma.fas")
    vrací T
    Pozor, výstupní soubor je umístěn do instalačního adresáře AutoCADu.
   
  Příklad zkompilování programu do souboru GoodKarma.fas umístěného v adresáři c:\my:
  (vlisp-compile 'st "yinyang.lsp" "c:/my/GoodKarma")
    vrací T
   
  Příklad uvedení celé cesty ke zdrojovému souboru
  (vlisp-compile 'st "c:/program files/acad2000/Sample/yinyang.lsp")
    vrací T
    Pozor, výstupní soubor je umístěn do instalačního adresáře AutoCADu. Výstupní soubor bude mít jméno yinyang.fas.