Giter Site home page Giter Site logo

inconvergent / weird Goto Github PK

View Code? Open in Web Editor NEW
1.6K 30.0 59.0 3.03 MB

Generative art in Common Lisp

Home Page: https://inconvergent.net

License: Other

Dockerfile 0.34% Shell 0.26% Common Lisp 99.40%
common-lisp lisp generative-art generative svg vector-graphics art plotter-art plotters graph

weird's Introduction

WEIRD-A Generative Art System

NOTE: I will probably not update this repo anymore. See auxin. For a stripped version of this repo

**NOTE: weird reqires cl-veq. the most recent compatible version of cl-veq must be installed locally for this system to work properly: https://github.com/inconvergent/cl-veq/releases/tag/v4.1.0-beta **

NOTE: An improved version of the graph data structure in the weir package can be found in my new project: cl-grph. Among multiple improvements, the graph structure in grph is immutable, and supports Datalog queries.

About

weird is the next iteration of weir, which was the next iteration of snek.

The library is written to be useful for a broad range of ways in which I create art using generative algorithms. Almost everything I have made over the past several years has been made using some version of this system.

Elastic Web

Components

Here are the main components:

  1. 2d/3d vector mathematics via cl-veq. See examples in veq for more details.

  2. A simple (undirected) graph data structure called weir. The structure can be manipulated directly, or via alterations. The latter is described in more detail below. Here is a simple example of how you can manipulate the structure directly:

    (in-package :weir)
    (let ((wer (make)))
      ; add three edges
      (loop repeat 3
            do (add-edge! wer
                 (2add-vert! wer
                   (rnd:2in-circ 200.0))
                 (2add-vert! wer
                   (veq:f2+ (veq:2rep 500.0)
                            (rnd:2in-circ 200.0))))
      ; iterate verts
      (itr-verts (wer v)
        ; prints vert coordinates
        (veq:vpr (2get-vert wer v)))
    
      ; iterate edges
      (itr-edges (wer vv)
        (veq:vpr (2get-verts wer vv)))
    
      ; move a vert relativ to current position:
      (2move-vert! wer 0 1.0 2.0)
      ; or to an absolute position
      (2move-vert! wer 1 1.0 2.0 :rel nil)
    
      ; edges are represented as lists of verts, and they are always
      ; sorted with the smallest vert index first, so both of these
      ; return t:
      (edge-exists wer '(0 1))
      (edge-exists wer '(1 0))
    
      ; get edges incident to vert 0
      (get-incident-edges wer 0))

    See examples/draw.lisp and examples/ex.lisp for more.

  3. Random numbers, some examples:

    (in-package :rnd)
    (rnd a) ; in range [0.0, a), defaults to a=1.0.
    (rnd* a) ; in range [-a, a), defaults to a=1.0.
    (rndrng a b) ; in range [a, b)
    (rndi 10) ; random fixnum
    (rndspace n a b) ; n numbers in [a, b)
    (norm :mu 0.0 :sigma 1.0) ; normal distribution
    (2in-circ a) ; in circle of radius a
    (2in-rect w h) ; in a rectangle
    (2nin-rect n w h) ; n in rectangle.
    (2on-line ax ay bx by) ; point between points a and b
    
    ; do something with probability 0.1, second form is optional
    (prob 0.1 (print "10% hi") (print "90% oh no"))
    
    ; perform either form 1 or (optionally) 2
    (either (print "form 1") (print "form 2"))

    See rnd.lisp, 2rnd.lisp and 3rnd.lisp, for all available functions.

  4. A tool for drawing svg files: wsvg. See draw.lisp.

In addition the library contains a number of useful tools for dealing with (predominantly) vector graphics.

Sun

Weir Graphs and Alterations

In my opinion, the most interesting part of the weir graph structure is alterations. An alteration is a change that will be applied to the structure at the end of a given context, provided it is valid.

The main motivation behind this is that this makes it possible to gather up a number of changes that will be applied to the graph at a later time. This makes it possible to access the state in the weir instance while you are creating the alterations. Without there being any changes made to the state of the weir instance while the alterations are being created. Once all alterations are created, the valid ones will be applied.

Existing alterations in weir are postfixed with ?. It might look like this:

(weir:with (wer %)
  (% (add-vert? (veq:f2 100.0 740.0))
  (% (add-edge? 1 4)))

(% ...) is used to collect alterations. They will be executed at the end of the with context. If an alteration evaluates to nil, nothing will happen.

Here is an example of how the forces are calculated in my Tangle of Webs simulation:

(veq:vdef* reciprocal-edge-forces (wer &key (stp 0.1))
  (weir:with (wer %)
    ; state of wer is unaltered
    (weir:itr-edges (wer e) ; edge (v0 v1)
      ; vector from v0 to v1
      ; force is proportional to this "oriented distance"
      (veq:f2let ((force (veq:f2-
                           (veq:f2$ (weir:2get-verts wer e)
                                    1 0))))
        (loop for i in e and s in '(-1.0 1.0)
              ; alteration is created, but nothing happens
              do (% (2move-vert? i
                      (veq:f2scale force (* s stp)))))))))
    ; alterations are applied at the end
    ; of the context

The important thing to note here is that for the forces to be calculated correctly, all edge lengths must be calculated before the forces are applied to the vertices.

Symbols

Futures and Dependencies

You can assign a name to the result of an alteration using

(% (add-edge? 1 3) :res :some-name?)

This makes it possible to create alterations that depend on the result of other alterations:

(in-package :weir)
(with (wer %)
  (veq:f2let ((pt (veq:f2 1f0 3f0)))
    (% (2add-vert? pt) :res :a?) ; alteration result is named :a?
    (% (2add-vert? (veq:f2 1.0 2.0)) :res :b?) ; result named :b?
    (% (add-edge? :a? :b?)))) ; depends on :a? and :b?

; all alteration results:
(print (get-alteration-result-list wer))
; or as a `hash-map`:
(print (get-alteration-result-map wer))

alteration names must be keywords that end with ?. (There is an exception, see Looping below.) And using the same name for multiple alterations will result in undefined behaviour.

As you can see, a named alteration is akin to a future; a reference to a result that may or may not exist eventually. For this to work, any alteration that depends on a future that fails (or returns nil) will be skipped.

You can use (weir:with (wer % :bd t) ...) to see how an alteration is expanded. This might make it easier to see what is going on.

As en example. The alteration:

(% (2move-vert? :vert?
     (veq:f2scale
       (veq:f2- (veq:f2$ (weir:2get-verts wer '(1 3)) 1 0))
       1f0)))

will be expanded to:

(VEQ:F2LET
 ((#:OUT-F2!P53
   (VEQ:F2SCALE (VEQ:F2- (VEQ:F2$ (WEIR:2GET-VERTS WER '(1 3)) 1 0)) 1.0)))
 (LET ((#:OUT-REL54 T))
   (LAMBDA (#:WER541)
     (CASE (WEIR::-IF-ALL-RESOLVED #:ALT-RES29 (LIST :VERT?))
       (:OK
        (VALUES T
                (PROGN
                 (WHEN
                     (WEIR::-VALID-VERT #:WER541
                                        (VALUES (GETHASH :VERT? #:ALT-RES29)))
                   (PROGN
                    (WEIR:2MOVE-VERT! #:WER541
                                      (VALUES (GETHASH :VERT? #:ALT-RES29))
                                      (WEIR::VAL* #:OUT-F2!P53)
                                      :REL #:OUT-REL54)
                    (VALUES (GETHASH :VERT? #:ALT-RES29)))))))
       (:BAIL (PROGN NIL (VALUES T NIL)))
       (T (VALUES NIL NIL))))))

Which won't work in its own unless :VERT? is also defined. But you can see how the promise resolution is handled. And how values (#:OUT-REL54, #:OUT-F2!P53) are defined in the surrounding closure.

Scribbles

Looping

It is possible to use alterations inside loops as well. but it requires a bit more careful consideration. Here is an example:

(in-package :weir)
(with (wer % :db t)
  (loop for x in (math:linspace 20 -20.0 20.0) do
    (loop for z in (list 1.0 2.0) do
      (veq:f3let ((xy (veq:f3 x y z)))
        ; create a distinct name
        (let ((g? (gensym "g")))
          (% (add-grp? :name (gensym "line")) :res g?)
          (% (2add-path?
               (veq:f$_ (list (veq:f3-
                                xy (veq:f3 1.0 8.0 (rnd:rnd)))
                              (veq:f3+
                                xy (veq:f3 1.0 2.0 (rnd:rnd)))))
               :g g?)))))))

Writing

I have written about things related to this code at:

Note that these posts refer to older iterations of the code. So some of the things will be out of date.

Boxes

On Use and Contributions

This code is written for my personal use, and parts of it is rather experimental. Also, it is likely to change at my whim. For this reason I don't recommend depending on this library for anything.

I release it publicly in case people find it useful or interesting. It is not, however, intended as a collaboration/Open Source project. As such I am unlikely to accept PRs, reply to issues, or take requests.

Installation and Dependencies

weird depends on cl-veq, and it requires Quicklisp to install other dependencies (which are listed in weird.asd).

To install and load weird, do:

(ql:quickload :weird)

If this does not work, weird may not be in a place Quicklisp or ASDF can see them. To fix this, either:

(load "weird.asd")

For a long term solution, add the following to .sbclrc:

#+quicklisp
(push "/path/to/dir/containing/weird" ql:*local-project-directories*)

You will have to make sure cl-veq is also available in the same fashion for any of this to work.

Versions and Compatability

Weird version 6.1.0 requires version cl-veq 2.2.0.

Tests

Tests can be executed using: (asdf:test-system :weird).

Thanks

I would like to thank:

Who have provided me with useful hints and code feedback.

The ASDF config and test setup was kindly suggested and implemented by Robert Smith (https://twitter.com/stylewarning). Although I have made some changes since then.

Also, many thanks to https://twitter.com/xach for making Quicklisp.

weird's People

Contributors

beshrkayali avatar inconvergent avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weird's Issues

Compiling error with VEQ on Windows 10

I wanted to report an issue when trying to compile this package on Windows 10 and SBCL version 2.3. Not sure if this is a windows specific issue with the VEQ package or if VEQ made changes not compatible with this project.

This is the line that is failing

...
;;; Computing Hangul syllable names.
; compiling file "C:/.../quicklisp/local-projects/weird/src/utils.lisp" (written 11 APR 2023 04:47:53 PM):
; 
; caught ERROR:
;   READ error during COMPILE-FILE:
;   
;     Symbol "PN" not found in the VEQ package.
;   
;       Line: 65, Column: 27, File-Position: 1968
;   
;       Stream: #<SB-INT:FORM-TRACKING-STREAM for "file C:\...\\quicklisp\\local-projects\\weird\\src\\utils.lisp" {100140A1A3}>

; compilation aborted after 0:00:00.045
; 
; compilation unit aborted
;   caught 2 fatal ERROR conditions
;   caught 1 ERROR condition
Evaluation took:
  7.322 seconds of real time
  2.515625 seconds of total run time (0.968750 user, 1.546875 system)
  [ Run times consist of 0.093 seconds GC time, and 2.423 seconds non-GC time. ]
  34.36% CPU
  685 forms interpreted
  1,186 lambdas converted
  21,933,072,426 processor cycles
  143,861,632 bytes consed
  
  before it was aborted by a non-local transfer of control.

Problems with running examples

Hello! Im trying to run examples from source and getting errors. Could you help me please?
First time I tried to load veq and weird with

(load "/home/tetenkov/projects/common_lisp/cl-veq/veq.asd")
(ql:quickload "veq")

(load "/home/tetenkov/projects/common_lisp/weird/weird.asd")
(ql:quickload "weird")

Everything worked and I got not errors.

Now I'm trying to run:

#!/usr/bin/sbcl --script

(load "~/.quicklisp/setup.lisp")
(load "/home/tetenkov/projects/common_lisp/cl-veq/veq.asd")
(ql:quickload "veq")

(load "/home/tetenkov/projects/common_lisp/weird/weird.asd")
(ql:quickload "weird")

(veq:vdef main (size fn)
 (let ((wer (weir:make))
       (wsvg (wsvg:make*)))

   (weir:2add-path! wer
     (veq:f2$+ (veq:f$_ '((-1f0 -202f0) (400f0 300f0))) 50f0 700f0))
   (weir:2add-path! wer (veq:f$_ '((401f0 2f0) (4f0 300f0))))

   (weir:2add-path! wer
     (veq:f2$+ (veq:f2$square 50f0) 700f0 700f0))
   (weir:2add-path! wer
     (veq:f2$+ (veq:f2$polygon 5 100f0) 800f0 800f0)
     :closed t)

   (weir:2intersect-all! wer)

   (weir:itr-edges (wer e)
     (wsvg:path wsvg (weir:2gvs wer e) :sw 10 :so 0.2))

   (loop for path in (weir:2walk-graph wer)
         do (wsvg:path wsvg (weir:2gvs wer path)))

   (wsvg:rect wsvg 10 100 :xy '(200 200) :sw 3f0 :stroke "red")
   (wsvg:rect wsvg 30 10 :xy '(400 200) :fill "black" :fo 0.5)
   (wsvg:rect wsvg 10 30 :xy '(400 200) :fill "black" :fo 0.5 :sw 4)

   (wsvg:circ wsvg 10 :xy '(200 200))
   (wsvg:wcirc wsvg 20 :xy '(200 200))

   (weir:itr-verts (wer v)
     (wsvg:circ wsvg 3 :xy (veq:lst (weir:2gv wer v)) :fill "black"))

   (wsvg:save wsvg "draw")))


(time (main 1000 (second (weird:cmd-args))))

Errors im getting:

To load "veq":
  Load 1 ASDF system:
    veq
; Loading "veq"

To load "weird":
  Load 1 ASDF system:
    weird
; Loading "weird"
...; 
; caught ERROR:
;   READ error during COMPILE-FILE:
;   
;     Symbol "FVPROGN" not found in the VEQ package.
;   
;       Line: 5, Column: -1, File-Position: 31
;   
;       Stream: #<SB-INT:FORM-TRACKING-STREAM for "file /home/tetenkov/projects/common_lisp/weird/src/rnd/2rnd.lisp" {1004849343}>
Unhandled UIOP/LISP-BUILD:COMPILE-FILE-ERROR in thread #<SB-THREAD:THREAD "main thread" RUNNING
                                                          {1000560083}>:
  COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "weird" "rnd/2rnd">

Backtrace for: #<SB-THREAD:THREAD "main thread" RUNNING {1000560083}>
0: (SB-DEBUG::DEBUGGER-DISABLED-HOOK #<UIOP/LISP-BUILD:COMPILE-FILE-ERROR {100487B373}> #<unused argument> :QUIT T)
1: (SB-DEBUG::RUN-HOOK *INVOKE-DEBUGGER-HOOK* #<UIOP/LISP-BUILD:COMPILE-FILE-ERROR {100487B373}>)
2: (INVOKE-DEBUGGER #<UIOP/LISP-BUILD:COMPILE-FILE-ERROR {100487B373}>)
3: (ERROR UIOP/LISP-BUILD:COMPILE-FILE-ERROR :CONTEXT-FORMAT "~/asdf-action::format-action/" :CONTEXT-ARGUMENTS ((#<ASDF/LISP-ACTION:COMPILE-OP > . #<ASDF/LISP-ACTION:CL-SOURCE-FILE "weird" "rnd/2rnd">)))
4: (UIOP/LISP-BUILD:CHECK-LISP-COMPILE-RESULTS NIL T T "~/asdf-action::format-action/" ((#<ASDF/LISP-ACTION:COMPILE-OP > . #<ASDF/LISP-ACTION:CL-SOURCE-FILE "weird" "rnd/2rnd">)))
5: ((SB-PCL::EMF ASDF/ACTION:PERFORM) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "weird" "rnd/2rnd">)
6: ((LAMBDA NIL :IN ASDF/ACTION:CALL-WHILE-VISITING-ACTION))
7: ((:METHOD ASDF/ACTION:PERFORM-WITH-RESTARTS :AROUND (T T)) #<ASDF/LISP-ACTION:COMPILE-OP > #<ASDF/LISP-ACTION:CL-SOURCE-FILE "weird" "rnd/2rnd">) [fast-method]
8: ((:METHOD ASDF/PLAN:PERFORM-PLAN (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1003D04DD3}>) [fast-method]
9: ((FLET SB-C::WITH-IT :IN SB-C::%WITH-COMPILATION-UNIT))
10: ((:METHOD ASDF/PLAN:PERFORM-PLAN :AROUND (T)) #<ASDF/PLAN:SEQUENTIAL-PLAN {1003D04DD3}>) [fast-method]
11: ((:METHOD ASDF/OPERATE:OPERATE (ASDF/OPERATION:OPERATION ASDF/COMPONENT:COMPONENT)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "weird"> :PLAN-CLASS NIL :PLAN-OPTIONS NIL) [fast-method]
12: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "weird"> :VERBOSE NIL)
13: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
14: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) #<ASDF/LISP-ACTION:LOAD-OP > #<ASDF/SYSTEM:SYSTEM "weird"> :VERBOSE NIL) [fast-method]
15: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP "weird" :VERBOSE NIL)
16: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
17: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "weird" :VERBOSE NIL) [fast-method]
18: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1003CFCF3B}> :OVERRIDE T :KEY NIL :OVERRIDE-CACHE T :OVERRIDE-FORCING NIL)
19: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))
20: (ASDF/SESSION:CALL-WITH-ASDF-SESSION #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1003CF6B5B}> :OVERRIDE NIL :KEY NIL :OVERRIDE-CACHE NIL :OVERRIDE-FORCING NIL)
21: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP "weird" :VERBOSE NIL) [fast-method]
22: (ASDF/OPERATE:LOAD-SYSTEM "weird" :VERBOSE NIL)
23: (QUICKLISP-CLIENT::CALL-WITH-MACROEXPAND-PROGRESS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT::APPLY-LOAD-STRATEGY) {1003CF6AAB}>)
24: (QUICKLISP-CLIENT::AUTOLOAD-SYSTEM-AND-DEPENDENCIES "weird" :PROMPT NIL)
25: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION (T T)) #<unused argument> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1003C66E3B}>) [fast-method]
26: ((:METHOD QL-IMPL-UTIL::%CALL-WITH-QUIET-COMPILATION :AROUND (QL-IMPL:SBCL T)) #<QL-IMPL:SBCL {1002896EB3}> #<CLOSURE (FLET QUICKLISP-CLIENT::QL :IN QUICKLISP-CLIENT:QUICKLOAD) {1003C66E3B}>) [fast-method]
27: ((:METHOD QUICKLISP-CLIENT:QUICKLOAD (T)) "weird" :PROMPT NIL :SILENT NIL :VERBOSE NIL) [fast-method]
28: (QL-DIST::CALL-WITH-CONSISTENT-DISTS #<CLOSURE (LAMBDA NIL :IN QUICKLISP-CLIENT:QUICKLOAD) {1003C6009B}>)
29: (SB-INT:SIMPLE-EVAL-IN-LEXENV (QUICKLISP-CLIENT:QUICKLOAD "weird") #<NULL-LEXENV>)
30: (EVAL-TLF (QUICKLISP-CLIENT:QUICKLOAD "weird") 4 NIL)
31: ((LABELS SB-FASL::EVAL-FORM :IN SB-INT:LOAD-AS-SOURCE) (QUICKLISP-CLIENT:QUICKLOAD "weird") 4)
32: ((LAMBDA (SB-KERNEL:FORM &KEY :CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) (QUICKLISP-CLIENT:QUICKLOAD "weird") :CURRENT-INDEX 4)
33: (SB-C::%DO-FORMS-FROM-INFO #<CLOSURE (LAMBDA (SB-KERNEL:FORM &KEY :CURRENT-INDEX &ALLOW-OTHER-KEYS) :IN SB-INT:LOAD-AS-SOURCE) {100183960B}> #<SB-C::SOURCE-INFO {10018395D3}> SB-C::INPUT-ERROR-IN-LOAD)
34: (SB-INT:LOAD-AS-SOURCE #<SB-SYS:FD-STREAM for "file /home/tetenkov/projects/common_lisp/weird/examples/draw.lisp" {100182E9A3}> :VERBOSE NIL :PRINT NIL :CONTEXT "loading")
35: ((FLET SB-FASL::THUNK :IN LOAD))
36: (SB-FASL::CALL-WITH-LOAD-BINDINGS #<CLOSURE (FLET SB-FASL::THUNK :IN LOAD) {7EFC9FE6F69B}> #<SB-SYS:FD-STREAM for "file /home/tetenkov/projects/common_lisp/weird/examples/draw.lisp" {100182E9A3}>)
37: ((FLET SB-FASL::LOAD-STREAM :IN LOAD) #<SB-SYS:FD-STREAM for "file /home/tetenkov/projects/common_lisp/weird/examples/draw.lisp" {100182E9A3}> NIL)
38: (LOAD #<SB-SYS:FD-STREAM for "file /home/tetenkov/projects/common_lisp/weird/examples/draw.lisp" {100182E9A3}> :VERBOSE NIL :PRINT NIL :IF-DOES-NOT-EXIST T :EXTERNAL-FORMAT :DEFAULT)
39: ((FLET SB-IMPL::LOAD-SCRIPT :IN SB-IMPL::PROCESS-SCRIPT) #<SB-SYS:FD-STREAM for "file /home/tetenkov/projects/common_lisp/weird/examples/draw.lisp" {100182E9A3}>)
40: ((FLET SB-UNIX::BODY :IN SB-IMPL::PROCESS-SCRIPT))
41: ((FLET "WITHOUT-INTERRUPTS-BODY-2" :IN SB-IMPL::PROCESS-SCRIPT))
42: (SB-IMPL::PROCESS-SCRIPT "./draw.lisp")
43: (SB-IMPL::TOPLEVEL-INIT)
44: ((FLET SB-UNIX::BODY :IN SAVE-LISP-AND-DIE))
45: ((FLET "WITHOUT-INTERRUPTS-BODY-14" :IN SAVE-LISP-AND-DIE))
46: ((LABELS SB-IMPL::RESTART-LISP :IN SAVE-LISP-AND-DIE))

unhandled condition in --disable-debugger mode, quitting
; 
; compilation unit aborted
;   caught 2 fatal ERROR conditions
;   caught 1 ERROR condition

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.