>>>>> "ES" == Emre Sevinc <[EMAIL PROTECTED]> writes:
[...]
ES> Tabii bu UCW belgesi ile alakasi yok merak ettim fark nasil
ES> gösterilir diye. "quote" special operator ile "list"
ES> fonksiyonu kullanilarak olusturulan liste arasinda ne fark
ES> var? Tek ve basit bir hareketle nasil gösterilir?
Garantili degil ama sbcl icin, mesela:
CL-USER> (defun test () (let ((foo '(1 2 3))) (print foo) (rplaca foo 3) (print
foo)))
; in: LAMBDA NIL
; (RPLACA FOO 3)
; --> LET PROGN SETF
; ==>
; (SB-KERNEL:%RPLACA #:ONCE-ONLY-0 3)
;
; caught WARNING:
; Destructive function SB-KERNEL:%RPLACA called on constant data.
; See also:
; The ANSI Standard, Special Operator QUOTE
; The ANSI Standard, Section 3.2.2.3
;
; compilation unit finished
; caught 1 WARNING condition
TEST
CL-USER> (test)
(1 2 3)
(3 2 3)
(3 2 3)
CL-USER> (test)
(3 2 3)
(3 2 3)
(3 2 3)
Compiler quoted listleri sabit data olarak kullanabiliyor, degisiklik
yapilirsa programin kendisi degismis oluyor. Yukaridaki fonksyon ikinci
defa cagirildiginda o program sourceunda gordugunuz (1 2 3) (3 2 3) haline
gelmis oluyor mesela. Eski FAQ'da bununla ilgili birsey vardi, ama
bakmadim simdi. SBCL yakaladi zaten gordugunuz gibi, ama yakalamasi sart
degildi.
Bu da lispworks mesela:
CL-USER> (defun test1 () (let ((foo '(1 2 3))) (print foo) (rplaca foo 3)
(print foo)))
TEST1
CL-USER> (pprint #'test1)
#.#'(LAMBDA ()
(DECLARE (LAMBDA-NAME TEST1))
(BLOCK TEST1
(LET ((FOO '(1 2 3))) (PRINT FOO) (RPLACA FOO 3) (PRINT FOO))))
; No value
CL-USER> (test1)
(1 2 3)
(3 2 3)
(3 2 3)
CL-USER> (pprint #'test1)
#.#'(LAMBDA ()
(DECLARE (LAMBDA-NAME TEST1))
(BLOCK TEST1
(LET ((FOO '(3 2 3))) (PRINT FOO) (RPLACA FOO 3) (PRINT FOO))))
; No value
CL-USER>
Program sourecunun bulunmasi sart degil tabii:
CL-USER> (compile 'test1)
TEST1
NIL
NIL
CL-USER> (test1)
(3 2 3)
(3 2 3)
(3 2 3)
CL-USER> (pprint #'test1)
#<function TEST1 2071286A>
; No value
CL-USER>
Baska bir suru ornek de dusunulebilir, simdi aklima bu geldi sadece. Bu
yeni baslayanlarin sIkca yapabildikleri bir hata cunku.
BM
_______________________________________________
cs-lisp mailing list
[email protected]
http://church.cs.bilgi.edu.tr/lcg
http://cs.bilgi.edu.tr/mailman/listinfo/cs-lisp