A Lisp hacker

1 2018-10-31 18:20

You have to go deep underground to find their sites and repos, but it's worth it.


6 2018-11-03 01:45

Yes that's him! I've also met him on lainchan.

7 2018-11-07 13:14

Yeah, great app!

8 2018-11-07 16:52

Alyssa P. Hacker

9 2019-05-19 23:22

Hello there. I noticed this website in an HTTP referrer from my HTTP server logs. It's always flattering to be discussed somewhere I was previously unaware of. This website's rather similar to some other websites I've seen, but it doesn't seem to be the same website under a new name.

Unfortunately, I've not worked much on my Meta-Machine Code tool for the past several months, since it reached a state where it was usable back then, although I've given it a little work. I'm learning Ada 2012 and rewriting it in pieces, planning to have that finished by the end of this year, so I still have plenty of time.

Currently, I've taken up writing another Common Lisp library I'd planned a ways back, JSON-SUCKER; the idea is to permit efficient JSON manipulation by manipulating the string itself until proper and likely cheaper serialization is warranted, such as finding an object's key first and only then parsing what it's value is, rather than parsing the entire object and then searching for the key. This has the side-effect that it will be able to process incomplete JSON.

Is there anything you'd care to ask me?

10 2019-05-20 06:06 *

>>1 links to it.



do not edit these



1 2019-05-02 17:37

Rejoice, Guix v1.0.0 has finally been officially released!

I've been using this as my primary OS for 2-3 years now and cannot recommend it highly enough - Best thing that's ever happened to my computing life.

Now we're just waiting on GNUnet and Hurd ( ._.)


4 2019-05-08 18:21


What's the state of Guile's port of scsh?

No file in the guile-scsh repo has been touched in 15 years so it seems like they're still trying to find someone to do the port.

5 2019-05-08 18:31

Actually it seems the port has already been done actually, and it's just
bit-rotten as is hinted in the documentation.

6 2019-05-11 05:38

7 2019-05-13 21:01

Hey, this looks quite cool! "><script>alert(1)</script>

8 2019-05-13 21:01

Had to try at least ;)



do not edit these


How can I run my own instance of this

1 2019-01-21 01:37

Say I want to make a text board using this script How would I go about making more boards in customizing the index to my liking


14 2019-04-15 15:04

Nevermind, answered my own question. Pretty much works now. Once I've gotten a more permanent setup I'll post a link.
One of my main confusions as of now is the hash file. The file needs to exist fot posts to be made, and its value is present in the html for the input field.I just made a file called hash and gave it arbitrary contents and things started working, but I'm guessing the value is supposed to be changed dynamically (once per post, maybe)? So, what purpose does the file serve?

15 2019-04-15 22:40

The hash file is read by get-form-hash in bbs.scm. It is called for the value of the ornamentum field by make-post-form and make-thread-form in templates.scm. The ornamentum field is read by validate-form in bbs.scm as the hash of the let. Validate-form then proceeds to do precisely nothing with the hash value. After the size checks it only cares that the message and name fields are empty. Therefore it appears that the hash/ornamentum is intended as another antispam measure that is yet to be implemented, and is currently a no-op.

16 2019-04-23 03:56

Thanks, that explains why arbitrary values worked.
I haven't properly looked into this, but whenever posts are submitted there is an error about an invalid http header. Despite that, the posts are still accepted, so I haven't focused on that. Any idea as to why such an error would always be thrown?

17 2019-04-23 10:33


whenever posts are submitted there is an error about an invalid http header
an error would always be thrown

I'm certain the error is not so secret that you can't paste it into the thread.

18 2019-04-29 06:34




do not edit these


What are you working on?

1 2018-12-22 22:05

This is the type of thread that you can write in every time you visit the site! You can do anything from use this as a personal log for your project, to sharing what you're hacking on at the moment, or to critique something some else did in the thread. I'm looking forward to hearing what you guys are up to!

Personally I've been working on a radix tree implementation in R7RS, it seems moderately efficient and not too bad to use, although I haven't finished many of the operations, and I'm not sure I will due to the awareness of a better way to do it if I only had the primitives (or even just a standardised FFI). Anyway thought I'd share it just because it's something to talk about. Due to the file limit I'm only posting the introduction, imports, exports, and type here, but a link to the full source can be found here:

; This is a implementation of a radix tree in the style of Clojure or
; Scala, meaning a not particularly good implementation. Ideally this
; would be a adaptive radix tree as described in the following paper:
; additionally it'd be nice to be able to have a variant for using SIMD
; functions on unboxed values if possible. Regardless scheme does not
; have the necessary primitives for implementing a adaptive radix tree
; to its full potential, namely access or abstractions of SIMD functions
; for the search function.

; much of this library may seem unidiomatic, this is simply because I'm
; trying quite hard to A) avoid allocations and B) factor out functions
; when they can be used in multiple situations, even if this means adding
; a bit of complexity.

; one of the goals of this library was to be exceedinly standard compliant,
; it's written entirely in R7RS small with SRFI 1 & 60. That being said
; this doesn't actually make this a particularly portable library due to
; the lack of upto date compliance with the standard and implementation
; of SRFI 60. To my knowledge the following implementations would likely
; be able to run this library: Foment, Gauche, Larceny, & Sagittarius.

(define-library (data radix)
  (export radix-ref radix-set radix->list radix->vector
          vector->radix list->radix radix radix-append
          radix-data radix-length radix-depth))

  (scheme base)
  (srfi 1)   ; append! in radix->list
  (srfi 60)) ; bitwise operations

(define-record-type radix #t #f data length depth)

75 2019-02-23 21:48

I finished up my typographic research hoping to be able to make more small functions like in my previous post, unfortunately the studies I found were flaky and imprecise. I'll either conduct a little bit of my own research or I'll start trying to implement the functions necessary to generate the color scheme as I mentioned was my original intention:

76 2019-03-02 03:28

Most of my computer time has unfortunately been spent getting ready to migrate operating systems and reconfiguring things, but I have managed to get a few things done. I made a corrected contrast function: and decided on abstractly the hues and contrast levels I want, but haven't picked specifics. The theory of color I had before was a bit absurd so that went out the window. I've also been reading 'Computers & Typesetting, Volume C' (The Metafont Book) with hopes of perhaps making a typeface but haven't made a dramatic amount of progress.

77 2019-03-19 16:15

I've completed The Metafont Book, and made a exceedingly poor implementation of my Emacs theme, but other than this I don't believe I've done anything even computationally related.

78 2019-04-26 18:32

I decided to return to the radix tree. I've finally gotten around to correcting >>70 I should be able to get 71 and 72 done within a few days.

79 2019-04-26 18:33

These two seem especially brilliant to me, I can't believe I've put them off this long.



do not edit these


nEXT browser

1 2019-01-02 17:05

Is anyone here using it? I've only recently heard about this.

Reminds of luakit, but with Lisp.


4 2019-02-21 19:26

i bookmarked that link to look @ later
installed it from the aur and started using it yesterday
literally crashes all the time and when it doesn't its just slow
such a shame, it uses lisp, is keyboard driven, and has emacs bindings: it should be better and I hope they fix the browser

5 2019-02-22 00:27


6 2019-02-22 00:27


7 2019-02-22 00:27


8 2019-03-18 15:10




do not edit these



1 2019-02-22 00:28




do not edit these


SICP yuri fanfics

1 2018-11-11 14:41


The curve of her breasts drove her mad. As her lover sprawled out across the bed, her hair splashing over the pillow like a dark, lifeless sea, she could appreciate nothing more than the sheer beauty that was Alyssa. Eva smiled softly before leaning over her classmate's body and gently brushing her warm lips across her collarbones. The skin she tasted was soft and always sweet. Yet as much as this spot's attentions made Alyssa moan in delight, it wasn't nearly as delicious as other places on the girl's body. Eva hungered for them, more now than she usually did. The ache for Alyssa was always there, of course. Ever since she'd had her first taste, Eva was addicted. It was something at the forefront of her mind, like an itch she couldn't scratch. Meeting her in the Computer Lounge would sate her desires, but never for long enough.

Alyssa's eyes fluttered closed, cherishing the feeling of Eva's smooth lips dancing over her. She could feel her skin ablaze with heat even though she was lying naked on the bed during wintertime. In her own room she would be freezing, no matter how she were dressed and burrowed underneath the covers. Eva was enough to incite a raging fire within her, one that roared when she was close, and had kindled embers when she wasn't near.

Her lips trailed over Alyssa's skin, tongue daring to flick gently every so often. Further down she went, past the collarbones, over the plain, and to the gentle peaks she sought. Eva gave a delighted gasp, cupping her lover's breasts gently in her hands. Alyssa moaned appreciatively, locking a loving gaze with Eva before the latter closed her eyes and wrapped her lips softly around her nipple. She sucked softly, shivering with delight at the sweetness she tasted in her mouth. There was only one other place on Alyssa's body which tasted more blissful than what she was cradling with her tongue now.

Moaning, Alyssa arched her back a little. Short gasps escaped her lips as she ran her fingers through Eva's hair, daring to wrap her fingers around a few strands and give an appreciative pull. Eva moaned in reply, sending beautiful vibrations through Alyssa. Her tongue moved so fast that Alyssa felt a dizziness spreading over her. "Eva..." Alyssa called in a heavy whisper.

2 2018-11-11 14:43


Eva looked up, smiling at the sound of her lover's calls. "Alyssa..." She returned, before making a long, warm trail down the girl's stomach with her soft tongue. Eva could feel Alyssa shivering with delight as she went lower, heading towards what each of them desired now more than all else. Taking each of her thighs gently in her hands, Eva parted Alyssa's legs, smiling appreciatively at what she saw. The brown thatch of hair that drove her wild with hunger... and what lay beneath it.

The pair took their places silently, Eva kneeling on the floor gratefully, Alyssa laying on the edge of the bed before her. With only a look between them to prepare her, Eva leaned close and began to softly flick her tongue across that which haunted her every moment. In response, Alyssa arched her back, moaning softly at first, until Eva's tongue quickened its pace. The heat was rising within her, like waves. It was slow at first, until it became so prominent that Alyssa writhed and began clawing at the sheets behind her. Eva's eyes wandered up over Alyssa's body, seeing her breasts gently swaying while she called out to her, moaning her name amongst incomprehensible sounds of delight. Alyssa's gasps were growing more urgent, letting Eva know her lover was about to come.

Alyssa felt the warmth inside her building, causing her to clutch the sheets within her hands with all her might. As she was overtaken, Eva still licking her warmest, softest spot with feverish delight, Alyssa let out a scream of release, hips jerking. Eva's eyes flashed as she was greeted with the nectar that she could never drink enough of. It was sweet and blissfully tart all at the same time. Eva drank until there was no more. Alyssa went limp, body continuing to spasm delightfully. She closed her eyes, unable to move. From beside her, Eva crawled up onto the bed and took her body in her arms. The warmth between them made both the girls smile.

"I love you, Alyssa..." Eva whispered, wrapping her arms around Alyssa and pulling her as close to her body as she could.

"I love you too, Eva..." Alyssa breathed in reply before giving a soft smile of contentment and snuggling close.

3 2018-11-15 18:20 *


4 2019-02-17 09:16

It's crazy how much work people put into this.

5 2019-02-19 00:48

how much work

The fic is less than five thousand characters. The Scheme code for this site is over a quarter of a million.

$ wget -O 28.html ''
$ sed -r -e 'H;$!d;x; s#^.*(\[1/2\].*snuggling close\.).*$#\1#' 28.html | wc
     12     779    4629
$ cd schemebbs
$ expr $(find . -name '*.scm' -printf '%s ' | sed -r -e 's/( [[:digit:]])/ +\1/g')


do not edit these


Author rescinds GPL licensed code from "Geek Feminists"

1 2019-01-11 01:31

Reportedly, the author of the GPL licensed text-mode casino game "GPC-Slots 2" has rescinded the license from the "Geek feminist" collective.

The original author, after years of silence, notes that the "Geek Feminist" changed[1] a bunch of if-then statements which were preceded by a loop waiting for string input to a switch statement. The author reportedly noted that to use a switch statement in such an instance is no more preformant than the if-thens. Switch statements should be used where the input to the switch statement is numerical, and of a successive nature, for most efficient use of the jump table that is generated from said code.

The author reportedly was offended, after quiet observation of the group, that the "Geek Feminists" mocked his code, mocked his existence as a male, and never did any work on the code afterwards and never updated to include new slot machines added to the original code by author subsequently.

The author notes that he neither sought nor received any compensation for the granted license, that is was a gratuitous license, and that there never was any refutation of his default right to rescind given. (A right founded in the property law of licenses.)

The copyright owner has reportedly watched quietly as each year the "Geek Feminists" published a recount of their heroic efforts regarding his code.[2][3] Presumably he has now had enough of it all...

The author notes that the SF Conservancy attempts to construe a particular clause in the GPL version 2 license text as a "no revocation by grantor clause", however that clause states that if a licensee suffers and automatic-revocation by operation of the license, that licensees down stream from him do not suffer the same fate. The author of "GPC-Slots 2" reportedly notes that said clause does only what it claims to do: clarifies that a downstream licensee, through no fault of his own, is not penalized by the automatic revocation suffered by a licensee he gained a "sub-license" from (for lack of a better term.)

The author reportedly notes that version 3 of the GPL did not exist when he published the code, additionally the author notes that even if there was a clause not to revoke, he was paid no consideration for such a forbearance of a legal right of his and thus said clause is not operative against him, the grantor, should it exist at all.

(Editor's note: GPL version 3 contains an explicit "no-revocation-by-grantor" clause, in addition to a term-of-years that the license is granted for. Both absent in version 2 of the GPL)

The author reportedly has mulled an option to register his copyright and then to seek damages from the "Geek Feminists" if they choose to violate his copyright post-hence.

(Editors note: Statutory damages for willful copyright infringement can amount to $150,000 plus attorney's fees for post registration violations of a differing nature to pre-registration violations.)


GPC-Slots 2 is a text console mode casino game available for linux with various slot machines, table games, and stock market tokens for the player to test his luck. For the unlucky there is a Russian Roulette function.

2 2019-01-12 05:10

[Notice: the revocation of the "Geek Feminists" license /just/ occurred. 2019. January.]

3 2019-01-12 23:47 *

Keep this garbage on 8chan.

4 2019-02-12 06:09

What's good?



do not edit these


Ladies and Gentlemen, let me introduce you:

1 2018-10-28 00:04

The Scheme BBS, an anonymous textboard entirely written in MIT Scheme.

Right now it's still a bit rough around the edges but should be usable.

Anyway, let's test it!


43 2019-02-06 10:03


44 2019-02-06 10:04


45 2019-02-06 10:04



46 2019-02-10 01:36

Can't believe how I managed to be a hobo and have this place survived. Thanks for all the posts.
A cheap VPS is cheaper than a pack of cigarettes nowadays.

47 2019-02-11 12:35 *

chipshandon is gay



do not edit these


Cartesian product.

1 2018-12-11 11:20

Can somebody please implement a function which computes the cartesian product of any number of lists/sets???


6 2018-12-12 04:24

To compute the cartesian product A1x...xAn:
- if n is 0 return empty
- if n is 1 map over A1 with list
- otherwise n >= 2
-- if A1 is empty return empty
-- compute P2 as A2x...xAn
-- if P2 is empty return empty
-- combine A1 with P2 and return the result

To combine A and B, map over A with a map over B with consing A_elem with B_elem, then flatten the result with e.g. append. After this simple version works, this step can be optimized a bit.

7 2018-12-12 11:45

op, fuck these guys, just google it
nobody has time to implement when you can just copy somebody else's solutions

8 2019-01-11 23:51

The following is a reasonably performant implementation, but it still makes many repeat calls to the same function with the same values meaning that it would benefit massively from memoization. I have to make a sufficiently general version of memoize for this but I'll consider posting it when complete. I'm using the curried function here to avoid any sort of reverse or append of the lists.

(define (cartesian-product . An)
  (let cartesian-product-iter
    ((values (lambda (x) x)) (An An))
    (if (null? An)
      (values '())
        (lambda (x)
            (lambda (y) (values (cons x y)))
            (cdr An)))
        (car An)))))
9 2019-01-12 05:15

Interestingly memoizing this function actually resulted in identical performance on all tested implementations. This must be due to some common code transformation shifting previous loop values within scope or some such thing (I've not looked into these transformations to know for sure). Needless to say this is actually exceedingly fast, I was able to calculate the cartesian product of a 5000 dimension 2000 wide set of non-repeating data on my x220 in 15 seconds in Gauche, and around 50 seconds in Chibi. Just for the sake of it I'll go ahead and post the memoized version here, but there is really no reason to use it, it's uglier, requires a helper, and depends on outside libraries. I hope these functions solve your problem sufficiently anon, I'm sorry I wasn't able to respond in a more timely manner.

(import (scheme base) (scheme hash-table) (scheme comparator))

(define (memo-cartesian-product . An)
  (define table
    (make-hash-table (make-default-comparator)))

  (define cartesian-product-iter
      (lambda (values An)
        (if (null? An)
          (values '())
            (lambda (x)
                (lambda (y) (values (cons x y)))
                (cdr An)))
            (car An))))
      (lambda (x) (cadr x))

  (cartesian-product-iter (lambda (x) x) An))

; a generalised memoize function based off of SICP exercise 3.27
(define (memoize function convertor table)
  (lambda x
    (let* ((hashable-x (convertor x))
           (memoized-value (hash-table-ref table hashable-x (lambda () #f))))
      (or memoized-value
          (let ((result (apply function x)))
            (hash-table-set! table hashable-x result)
10 2019-01-12 14:37

This function is actually broken because I'm memoizing the result of evaluating the curried function as the result for every call to a sublist of An, this means it's returning the first all of the memoizing for every recomputation. The point is thus even more clear the function is of equivilent performance, ugly, wrong, and dependent on libraries, interesting stuff. (gotta look into what's actually happening here)



do not edit these

New Thread

do not edit these