Zobrazit plnou verzi příspěvku: Uprava Lispu

Augur
03.09.2007, 10:40
Chcel by som poziadat o radu, pri modifikacii tohoto lispu.
Vysledok by mal byt taky, ze pri nezadani hodnoty na prepisanie sa pouzije predvolena hodnota napr. "X"

(defun c:repstring ()
(SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
(SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))
(REPSTRING OSTRING NSTRING)
)

Snazil som sa to zapisat nejako takto, ale nech robim, co robim, stale to nejde.

(defun c:repstring ()
(SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: "))
(if (= "") (SETQ "x") (GETSTRING T "\nSTRING TO BE REPLACED: ")))
(REPSTRING OSTRING NSTRING))

Vladimír Michl
03.09.2007, 11:10
(defun c:repstring () (SETQ OSTRING (GETSTRING T "\nSTRING TO BE REPLACED: ")) (SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH <něco>: "))
(if (= NSTRING "")(setq NSTRING "něco"))(REPSTRING OSTRING NSTRING) )

Augur
03.09.2007, 11:34
Dakujem, funguje.

Ferdinand
03.09.2007, 16:47
Ve stařičké Učebnici Autolispu je následující řešení:
 
;B...implicitni hodnota;C...vyzva uzivateli (to, co bude v zavorkach tj. <C>);D...typ promenne (real, int, str)(defun default (B C D / TEMP)  (cond ((= D "real")  (if (= B nil)    (setq B 1)  )  (prompt (strcat C " <" (rtos B 2 2) "> "))  (setq TEMP (getreal))  (if (= TEMP nil)    B    TEMP  ) ) ((= D "int")  (if (= B nil)    (setq B 1)  )  (prompt (strcat C " <" (rtos B 2 0) "> "))  (setq TEMP (getint))  (if (= TEMP nil)    B    TEMP  ) ) ((= D "str")  (if (= B nil)    (setq B "")  )  (prompt (strcat C " <" B "> "))  (setq TEMP (getstring t))  (if (= TEMP "")    B    TEMP  ) )  )  ;(princ))
;;;;Priklady volani implicitni hodnoty:;;;;  (setq PROM (default BB CC DD)) ;obecny tvar - v prikazovem radku se objevi:;;[retezec CC:] <hodnota BB>;;kde format BB bude DD;;  (setq A1 (default 10 "\nZadejte cele cislo: " "int")) ;<default> pro promennou A1 bude hodnota <10> tj. Integer;;  (setq A2 (default A1 "\nZadejte realne cislo: " "real")) ;<default> pro promennou A2 bude promenna <A1> a to Real;;  (setq A3 (default "doleva" "\nSmer bude: " "str")) ;<default> pro promennou A3 bude retezec <doleva> tj. String;;

Ferdinand
08.01.2008, 16:30
[QUOTE=Vladimír Michl](defun c:repstring ()
...[/QUOTE]
Mně to nefunguje:
Command: _appload repstring.lsp successfully loaded.
Command: repstring
STRING TO BE REPLACED: ABCDE
STRING TO REPLACE WITH <něco>: Enter
; error: no function definition: REPSTRING
 

Vladimír Michl
08.01.2008, 16:50
To byl jen fragment kódu - definice funkce (repstring) tam není.

Ferdinand
08.01.2008, 17:16
[QUOTE=Augur]...
(SETQ NSTRING (GETSTRING T "\nSTRING TO REPLACE WITH: "))(if (= "") (SETQ "x") (GETSTRING T "\nSTRING TO BE REPLACED: "))) (REPSTRING OSTRING NSTRING))[/QUOTE]
Pro tuto formu zápisu bych to spíše napsal:
 
;;predvolena hodnota:
(setq DFT (strcat "<ABC>"))
 
(setq OSTRING (getstring "\nSTRING TO BE REPLACED: "))
(setq NSTRING (getstring (strcat "\nSTRING TO REPLACE WITH: " DFT)))
(if (= NSTRING nil) (setq NSTRING DFT))
 
;;zamena OSTRING na NSTRING: (nevim jak)
(???? ???? ????)
Co to je "T" ?
 
Jinak je to řešeno - např. chgtext.lsp
http://www.cadinfo.net/scripts/LISPlib-software.cfm?StartRow=11&areano=331
http://www.design-drawing.com/lisp/LSP-chgtxt.htm
http://www.cadcorner.ca/lisp.php
http://www.itcad.net/ChangeText.htmFerdinand2008-01-08 17:17:04