Anda tidak bisa -- Skema meneruskan semua nilai "berdasarkan nilai", jadi pada fungsi experiment
di atas cukup memodifikasi argumen masukannya sendiri. Agar sesuatu seperti ini berfungsi, Anda dapat menggunakan sebuah kotak, yang merupakan wadah nilai yang secara eksplisit dapat diubah:
(define test (box "fails"))
(define (experiment input) (set-box! input "works"))
(unbox test)
(experiment test)
(unbox test)
Jika Anda benar-benar ingin mengubah nilai suatu variabel, Anda dapat menggunakan makro:
(define-syntax-rule (experiment input) (set! input "works"))
Ini membuat experiment
sebagai makro, yang berarti setiap formulir (experiment foo)
ditulis ulang menjadi (set! foo "works")
. Hal ini dapat menimbulkan konsekuensi yang tidak kentara, jadi bukanlah ide yang baik untuk menggunakan ini kecuali Anda tahu apa yang Anda lakukan. (Misalnya, (experiment 2)
akan gagal dengan cara yang "menarik".) Menulis makro dalam Skema itu mudah, namun menulis makro yang baik masih lebih sulit daripada menulis definisi fungsi baru.
[Perhatikan bahwa saya berasumsi Anda menggunakan Skema PLT dalam jawaban ini. Namun kedua bagian dapat diterjemahkan ke dalam Skema "standar" jika diperlukan -- misalnya, gunakan sel cons
yang dapat diubah untuk sel pertama, dan gunakan define-syntax
dengan syntax-rules
untuk sel kedua.]
person
Eli Barzilay
schedule
10.11.2009