2010-03-14 12 views
7

Instalé ltk en Steel Bank Common Lisp con asdf-install, pero ni siquiera puedo empezar a utilizarlo V_V. El siguiente código es el ejemplo más simple en la documentación, y se copia casi textualmente.Problemas con ltk (ceceo común)


(asdf:operate 'asdf:load-op :ltk) 

(defun hello-1() 
    (with-ltk() 
    (let ((b (make-instance 'button 
          :master nil 
          :text "Press Me" 
          :command (lambda() 
             (format t "Hello World!~&"))))) 
    (pack b)))) 
(hello-1) 

Este es el mensaje de error que recibo de sbcl:


> ; in: LAMBDA NIL 
;  (PACK B) 
; 
; caught STYLE-WARNING: 
; undefined function: PACK 

;  (WITH-LTK NIL 
;  (LET ((B (MAKE-INSTANCE 'BUTTON :MASTER NIL :TEXT "Press Me" :COMMAND #))) 
;  (PACK B))) 
; 
; caught STYLE-WARNING: 
; undefined function: WITH-LTK 
; 
; compilation unit finished 
; Undefined functions: 
;  PACK WITH-LTK 
; caught 2 STYLE-WARNING conditions 

debugger invoked on a SIMPLE-ERROR in thread #<THREAD "initial thread" RUNNING {1002A57B61}>: 
    There is no class named BUTTON. 

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL. 

restarts (invokable by number or by possibly-abbreviated name): 
    0: [ABORT] Exit debugger, returning to top level. 

(SB-PCL::FIND-CLASS-FROM-CELL BUTTON NIL T) 
+0

¿Está la falta (en la primera línea sólo un error de copiar y pegar (supongo que algo así) –

+0

Er .. sí que era, gracias – Silvanus

Respuesta

5

Tienes que importar los símbolos en el paquete que desea que funcione en

El paquete genérico de "usuario" es cl-user, y una imagen "virgen" lo colocará allí. Para importar los símbolos (exportados) de otro paquete, emita (use-package :another-package). Ejemplo en el REPL:

(asdf:load-system :ltk) 
(use-package :ltk)

A veces se desea utilizar símbolos que no se importen. Luego puede prefijarlos con el paquete, como bar:foo, donde bar es el nombre del paquete y foo el símbolo.

Cuando trabaje en un sistema real, generalmente definirá uno o más paquetes para él. Esto se hace a través defpackage, que se puede decir lo que otros paquetes para importar directamente:

(defpackage #:my-app 
    (:use :cl 
     :ltk))

Entonces, es necesario para cambiar a ese paquete:

(in-package #:my-app)

Al configurar un sistema más complicado con varios archivos interdependientes, una instalación de definición de sistema vale la pena. El actualmente más utilizado es ASDF, aunque existen algunas alternativas.

+0

IIRC ltk define el paquete ltk-user para ejecutar las demostraciones en. – PuercoPop

0

ASDF no se carga un paquete en el paquete COMÚN-LISP-USUARIO. Como resultado, CON-LTK no está definido en el paquete actual, por lo que necesita para hacer esto:.

(asdf:oos 'asdf:load-op :ltk) 
(in-package :ltk) 
;put your function here 
+0

que no recomendaría que trabaja en el paquete de la biblioteca – Svante

+0

@Svante:?.. Ah, y ahora veo tu respuesta :) –

Cuestiones relacionadas