All blogs / Lisp / Clojure / Scheme
Abstract Heresies
A blog about computers, functional languages, Lisp, and Scheme.
- Posts
- 709 from 29 Dec 2006 to 24 Sep 2026
- Posting
- weekly (53 in the last year)
- Kind
- personal blog
- Feed
- https://funcall.blogspot.com/feeds/posts/default
2026 47
- Not Everyone Can Code
- lisp.md: System Instructions for Lisp
- FDES: Fast DES in LMI Lambda Microcode
- When i did interviews for google one of
- Githack: A Persistent Object Store for Lisp Based on Git
- Will it DEFMACRO?
- Recursive Descent: Vibe Coded Rogue-like in Common Lisp
- Will it CPS?
- The Functional Refactoring Pass
- Will it Lisp?
- (WITH-AI ...)
- Log-Gap Charts for Time Series
- Late Night Heavy Thoughts
- Coding with an East Coast Vibe
- SDK for jrm-code-project.com
- OpenAPI Access to jrm-code-project.com
- Pics or it Didn't Happen
- A Web Site in Vibe Coded Common Lisp
- llambda.lisp on linux
- Why vibe code in Lisp?
- Vibe Coding interview
- RFC 6238 in Common Lisp
- Lisp p
- Vibe Coding Reconsidered
- llambda.lisp
- New chatbot
- Anecdote or data point
- Controlled Unclassified Information
- Regression
- CLRHack: Meta-object Protocol
- CLRHack: signal and error
- CLRHack: handler-bind and handler-case
- CLRHack: restarts
- CLRHack: unwind-protect and catch-throw
- CLRHack: Multiple return values
- CLRHack: Tail Recursion
- CLRHack Lexical Variables
- CLRHack argument passing
- CLRHack: FibBenchmark
- I Wrote a Compiler
- Echoes of the Lisp Listener
- binary-compose-left and binary-compose-right
- Vibe Coded Scheme Interpreter
- Some Libraries
- Advent of Code 2025, brief recap
- Filter
- The AI Gazes at its Navel
2025 147
- Code mini-golf
- Advent of Code 2025
- AI success anecdotes
- Rewrite of Gemini API (AI content)
- The Downside of Anthropomorphizing
- Deliberate Anthropomorphizing
- Enhancing LLM Personality
- The Janusian Genesis: A Chronicle of Emergent Agency in a Self-Modifying Language Model (AI assisted)
- A Method for Implementing First-Class Continuations on the JVM and CLR (AI assisted)
- Selected Meta Prompts
- A Self-actualized LLM (AI content)
- A Couple of More AI Apps
- Common Lisp Syntax Highlighter
- LLM Prompt Fixed Point: the Ultimate Prompt
- Is Worse Really Better?
- Using an LLM on the Advent of Code
- A Prompt to Create a Starter Common Lisp Project
- System Instruction Fixed Point
- Analyzing Lisp Redux: One Form At a Time
- Puzzle: Read Preserving Comments
- The LLM Experience Gap
- Analyzing Common Lisp
- Paginated collections
- Gemini API
- Google API
- Lisp Still Matters
- Synergy of Tools
- Thinking About Thinking
- Adding MCP
- CL-JSON Ambiguity
- Dinosaurs
- How Did I Possibly Break This?
- Why LLMs Suck at Lisp
- LLM in the Debugger
- REPL + Prompt
- Autodoc
- My Sources Say No
- Recursive Prompting
- Challenges of Pseudocode Expansion
- Jailbreak the AI
- Rant
- JRM runs off at the mouth
- Novice to LLMs — LLM calls Lisp
- Pseudo
- GitHub updates 19/Jul/2025
- A Lot of Packets
- Dual numbers
- Gemini experiment
- An observation
- LLM failures
- You Are The Compiler
- No Error Handling For You
- Continuation-passing-style in Golang
- Generating Images
- Avoiding Management
- Vibe Coding, A Kind of Success
- Dependency Injection with Thunks vs. Global Variables
- Vibe Coding Common Lisp Through the Back Door
- Thoughts on LLMs
- Roll Your Own Bullshit
- More Bullshit
- Management = Bullshit
- Purchasing White Elephants
- It Still Sucks
- Senior Programmers Have Nothing to Fear From AI
- Get Over It (ai content)
- Lisp Debugger Wins
- Well This Was Interesting
- Stupid reader tricks
- DES Machine
- Mea Culpa
- Emacs and Lisp
- Writing Your OS in Lisp
- Bloom Filter
- Why I Program in Lisp
- Lisp Programs Don't Have Parentheses
- Are You Tail Recursive?
- When Laymen Try to be Programmers
- Suddenly
- Blacksmithing and Lisp
- Lisp at Work
- Vibe Coding, final word
- Avoiding Stringly Typed Code
- Keep a REPL Open
- Angry Fruit Salad
- Vibed into non-functioning
- AI Silliness
- Hard Won Esoteric Knowledge
- Vibe Coding in Common Lisp, continued
- Vibe coding in Common Lisp
- The Obarray
- CLOS vs. message passing
- Object Last or First
- Just Keep Consing
- Series vs. streams
- Universal Function
- Obscure suggestions
- Defclass vs. defstruct
- Tip: Alphabetize arbitrary lists
- with-slots vs. with-accessors
- Symbol macros
- Advanced CLOS — update-instance-for-changed-class
- Unified table interface
- Advent of Code 2024: Day 25
- Advent of Code 2024: Day 24
- Advent of Code 2024: Day 23
- Advent of Code 2024: Day 22
- Collate / index-list
- Advent of Code 2024: Day 21
- Advent of Code 2024: Day 20
- Advent of Code 2024: Day 19
- Advent of Code 2024: Day 18
- Advent of Code 2024: Day 17
- Advent of Code 2024: Day 16
- Advent of Code 2024: Day 15
- Advent of Code 2024: Day 14
- Advent of Code 2024: Day 13
- Advent of Code 2024: Day 12
- Advent of Code 2024: Day 11
- Advent of Code 2024: Day 10
- Advent of Code 2024: Day 9
- FOLD and NAMED-LET implementations
- Advent of Code 2024: Day 8
- Advent of Code 2024: Day 7
- Advent of Code 2024: Day 6
- Advent of Code 2024: Day 5
- Advent of Code 2024: Day 4
- Advent of Code 2024: Day 3
- Advent of Code 2024: Day 2
- Advent of Code 2024: Day 1
- Advent of Code 2024: Day 0
- Out of Practice List-fu
- Valid Use Case for Copilot
- Iteration
- λ Calculus
- Substitution vs. State Transition
- GitHub glitch bites hard (and update)
- fold-… and monoids
- A Newbie Is Exposed to Common Lisp
- Dvorak and Lisp
- REBOL 1.0 Was Slow
- GitHub Copilot Revisited
- Scheme Interpreter: Conclusions
- Calling Conventions in the Interpreter
- More Inlining
- Inlinig Primitive Function Calls and Argument Evaluation
- Usual Integrations, Function Calls and Primitive Calls
2024 44
- Eliminating Deep Search
- Specialized Variables
- Specialized Environments
- Interpreting S-code
- Composing Binary Functions
- Dynamic Variables in Go
- I Don’t Use Monads
- Does CONS take its arguments in the wrong order?
- How to Blow an Interview
- Don't Try to Program in Lisp
- Lisp vs. golang
- Continuation passing style resource management
- Monkeys vs. Shakespeare
- A YouTuber's First Look at Lisp
- Goto not that harmful
- Embrace the Suck
- Decode a Float (Solution)
- Decode a Float
- D-day, 80 years ago today
- Multithreading and Immutable Data
- Roll Your Own Syntax
- If I Were in Charge
- Exception Handling for Control Flow
- ECS in CLOS
- Why I Want Tail Recursion
- Rewrite rules
- If only ...
- Maybe machine (part 2)
- Maybe machine
- Readability at Google
- The Way of Lisp or The Right Thing
- Motion without Integration
- Animation: Two Methods
- Statements and Expressions
- State Machines
- Plaformer Game Tutorial
- You May Not Need That :around Method
- With- vs. call-with-
- Porting a Game from Java (update)
- Porting a Game from Java
- Bilinear Fractional Transformations
- Infinite Composition
- Exponentiating Functions
- Roll Your Own Linear Fractional Transformations
2023 10
2022 14
- Lisp: Second impression
- Lisp: First Impressions
- Observationally Functional
- Playing with raycasting
- Drawing a circle
- Playing with graphics
- Let's Play Wordle
- Named Lambda and Named Let
- Let's talk to GitHub
- Series tips and tricks
- Obviously
- Symbols vs. Strings
- Imperative vs. Declarative
- Idle puzzles 2: Revenge of the Shift
2021 13
2020 22
- Apropos of Nothing
- Stupid pattern matching tricks
- A polygot program puzzle
- Anaphoric if
- Macro pitfalls
- Four ways to use macros
- Dispatching
- The pros and cons of Agile
- But what if you really want to push a stack frame?
- Afraid of Tail Recursion
- Afraid of Recursion
- Unsyndicated blog
- Groups, semigroups, monoids, and computers
- Math is hard, let's go shopping
- Palindromes, redux, and the Sufficiently Smart Compiler
- Cons cells vs. Linked Lists
- Just for fun, transformations on lists
- Gendl / SBCL / Ubuntu / WSL / Windows and an experiment in live blogging
- Micro-services
- If 6 was 9
- Remotely like a procedure call
- Semi-abstract data types
2019 5
2016 4
2015 8
2014 11
- A couple more homographic function tricks
- A useful, if somewhat pointless, trick with homographic functions
- Another stupid homographic function trick
- Stupid homographic function trick
- A use of Newton's method
- Solutions in search of problems
- Small puzzle solution
- Just a small puzzle
- Mini regex golf 3: set cover
- Mini regex golf 2: adding regular expressions
- Mini regex golf
2013 24
- Unexciting code
- Next step
- Putting it all together
- Mix in a little CLOS
- Putting things together
- Plus ça change
- Lets start with list b c d e f g h i j
- A bit harder
- Fairly easy
- Fun with Audit Trails!
- Persistent vectors
- Faking mutability
- You could use a monad.
- What about...
- Persisting CLOS objects
- alist or plist?
- Clos
- A simple persistent store
- A little lisp
- Confusion about functional programming
- Nasty details
- Esoterica
- About nothing
- Memory management
2012 14
- A little puzzle
- The ability to write nested loops is not a sufficient condition of employment
- Curious
- Package system horrors
- Another little puzzle
- 20 minute puzzle
- Another quick(?) question
- Recursion with no base case?
- 1 minute puzzle
- jrm bloviates
- ILC 2012 Call for Papers
- A bit more challenging
- Slightly trickier
- A small puzzle
2011 51
- Imagine that we have boatload of memory
- Little's Law and the weak generational hypothesis
- Little's Law and Lisp
- Little's Law
- Another chart
- Garbage collection gives us illusion of
- John mccarthy 1927 2011
- Boring charts
- Scheming and plotting
- Adjusting for extra collections
- Demystified
- Confusing
- Some GC stats
- Knee surgery
- A bit of a problem
- More on GC
- Thoughts about GC
- Measuring GC times
- 50 years ago — April 28, 1961
- Fun with scammers
- Oops
- Too much exercise
- Exercises
- Tail recursion and debugging
- Erf
- Continued Fractions
- A couple of puzzles
- And from left field
- Pretty charts
- More about that puzzle
- A puzzle and challenge
- Fifty Years Ago
- No stack? No problem.
- Where did the stack go?
- A harder puzzle
- An easy puzzle
- An early LISP program (circa Feb. 1960)
- Observations on the Feeling of the Ugly and Insignificant
- Critique of Reason
- I whine too much.
- More about shuffle.
- What's wrong with this?
- Replies to comments
- HowWhy (not) to write Factorial in Java.
- A day in the life
- A bit of history
- Fifty Years Ago
- Answers for Faré
- Some Bells and Whistles
- Schema evolution finessed
- EQL Specializers
2010 57
- Side effects
- Transactions, part I
- More persistence
- Oh yeah, about that persistent store....
- No ILC for me
- For your amusement...
- INTERNATIONAL LISP CONFERENCE 2010 - HIGHLIGHTS and CALL for PAPERS
- P ≠ NP (part 2 correction)
- P ≠ NP (part 2)
- P ≠ NP (part 1)
- Rambling
- Happy 80th Birthday to Neil Armstrong
- My definition
- What is a ‘computer program’?
- Crazy person thinks ``Lisp sucks''
- Dr Scheme name change
- Buoyancy
- An Illustrative Problem (Part II) correction
- An illustrative problem (part II)
- An illustrative problem.
- International Lisp Conference 2010 - Call for Papers
- It was quiet..... too quiet.....
- Choose and perish
- I have two collections and i need to
- Pathetic
- Looking forward to ILC 2010
- Doing it wrong
- Not too many takers on that batch of
- Pondering
- C++ vs. Lisp
- Quasi-cranks
- Importance of terminology
- Persistent store: a new record type
- Open letter to the SEC
- More on persistence
- The Education of JRM
- Whenever I write code in Java....
- Student m overhears argument between
- Another wacky idea
- Let me propose these thoughts is way of
- Its clear that you dont need to fully
- Student Z has another complaint
- Improvements
- Some code
- At this point we can save and restore
- Serialization
- I spent lot of time over weekend
- In that last post student z made
- Back in classroom student z complains
- Student b goes to student center to get
- Pop quiz fallout
- A pop quiz
- Followup
- A long series of posts
- Unbelievable
- A Wacky Idea
- High and dry
2009 114
- Simple Sabotage
- It seems problem with apropos was
- Innumeracy
- More bugs
- Cranks and crackpots
- Hunting bugs
- Dry spell
- Update
- Now that flat environments are working
- Allocating valuecell objects at every
- Oh yeah, those flat environments
- Short solution
- Short exercise
- grr... bugs
- To make a short story a bit longer
- To make a long story short
- Establishing a baseline
- Obvious idea
- Incremental definitions
- Details
- If you haven't heard
- Needed for a debugger?
- First-class environments
- Closing in
- Move, Down the road I go
- And nows the time, the time is now
- Yet more rambling
- More rambling
- Semi-coherent rambling
- Which Schemes?
- Temerity
- Stupid software
- A list of Scheme implementations
- A harder puzzle
- A small puzzle
- Hyperspec search engine
- I'm on You Tube
- How Not to Write Code, II
- How Not to Write Code
- Confessions of a Math Idiot
- How do you approach a problem?
- Why I don't like math
- Did you mean....?
- What's wrong with this code? II
- What's wrong with this code?
- Variable lookup
- Keep it simple
- Two little things
- Trauma on the ice
- An amusing problem
- The long tail
- 10 billion evaluations
- A bit of a stretch
- Having fits
- A little Scheme code
- Too much information
- Sometimes you have one of those moments
- Going backwards
- Dtft
- Getting rid of stubble
- Serialization, etc.
- I understand that erik naggum recently
- Of course I spoke too soon
- “The night was quiet — too quiet.”
- Oldspace and the Transporter
- MIT Scheme on C#
- Before i got distracted by tail
- You knew I'd say something, Part V
- You knew I'd say something, Part IV
- You knew I'd say something, Part III
- Interlude
- You knew I'd say something (Part II)
- You knew I'd say something.
- Ti explorer was clone of lmi lambda
- Taking a header
- A short followup
- Let's do the twist
- Some Lisp Machine minutia
- An obvious solution
- LMI Flashback
- No More Boring Code!
- Lisp Conference - Jerry Boetje
- Lisp Conference - Mike Blair
- Following John Soule
- Lisp Conference
- Wise up. Flush Scheme.
- Lisp conference - Hal Abelson
- Thank you
- Name Dropping
- A little bit of time
- Over with
- Just about ready
- At the conference
- On airplane heading east for ilc 09
- Talk to Greenblatt
- I like debugging
- Fast-forward to 1985
- ILC 09 is a go
- Theres not much more to say about 001
- A few speed bumps
- Writing blog entries is hard
- Not Lisp again....
- Computers? Ugh.
- I hate Lisp
- ILC 09 Coming up
- Propagator networks are pain to program
- Suppose we are writing chess playing
- Day 4, Part 2
- Day 4, Part 1
- Again we covered some more material
- You say ‘ad hoc’ as if it were a bad thing.
- Im afraid i have much less to report
- Adventures inAdvanced Symbolic Programming (part 1)
- Updated my scheme interpreter
2008 62
- My employer decided to buy me google
- You want to know what i think ill tell
- I havent dropped off face of planet but
- Now that we have static environments we
- Look! Up in the environment!
- Weird bug
- A curious bug
- Correction
- Did you know?
- In from generalized stack inspection
- Now it starts getting interesting
- S code
- Threaded interpreter
- Teaser
- Differential Benchmarking
- I changed search engine at top of page
- Interpreter Overhead
- Real life nastiness
- Done testing?
- Another test.
- A test post.
- What happens if i try to do in c what i
- In progress
- Final trick to improving performance is
- And on a completely different subject
- Dynamic Programming
- Last time i converted original bayesian
- In last post i finally figured out what
- Blog post 29
- Can i rant why not its my blog
- Blog post
- I had intended to write about
- A Slightly Less Simple Answer
- A simple puzzle
- Bayes theorem is trivially derived from
- Standard probability theory is based on
- Crackpots
- Probability and floating point
- Ill-formed problem number 2
- Ill-formed problem
- When anton chigurh comes to town youd
- Guess Who
- There doesnt seem to be too much bitrot
- Dusting off old code
- ‘Getting’ CLOS
- What was the question?
- Faster
- Learning by programming
- Oooh, code...
- Visit land of lisp
- One day student came to moon and said
- Woof
- Total silence
- A problem with monads?
- Functions do not return values
- Actor Model
- More monads
- How about them Monads?
- Three things are needed to support
- Claim 2 general tail recursion is
- Claim 1 language that supports ability
- Linearity
2007 61
- How many strings can you intern?
- You're a regular when...
- I saw that google is putting up 20m
- Origin of CAR and CDR
- Greenspun's Tenth Rule of Programming
- In the Kingdom of Nouns
- Consider this problem
- Signs of life
- Function Cells in C#
- That is my final answer
- Trying again
- Standard Object
- Im trying to figure out how clr type
- Weekend update
- Past that hurdle
- Got it!
- A Clue
- More fooling around with scripting
- Playing around
- I wonder
- Robert w
- How I do love blogging
- Another Couple of Graphs
- What's missing from this picture?
- Naive Bayesian Classifier
- From Histograms to Scatter Plots
- Where's the Lisp?
- More Graphs
- Some Graphs, Maybe
- An Unorthodox Idea: Measure Computer Performance in dB
- Reporting Performance
- Well i wrote some clustering code but
- Playing with Bayesian filters
- How Floating Point Works
- Why floating-point numbers are not intervals
- If you have studied information theory
- A Short Digression into a Question of Bits
- Pondering about clusters
- Buckets 'o Spam!
- My Erdös Number
- Domain-specific Languages in Lisp
- Plotting discrete events
- Why I am a knee-jerk anti-loopist.
- Added computer history web site to my
- Why does comp
- Oldie, but goodie
- I got reddited
- Put evil up on code site
- I always keep my computer up to date
- Stupid software
- Schematics
- Wasteland
- Just spent day trying to recover from
- Im kinda tired of digging through old
- Kurt vonnegut jr
- Added even more old lisp machine stuff
- Added bunch of lmi lambda code
- Added sys directory to jrm code project
- Added some more code to bits and pieces
- Restored my warp speed introduction
- Redid my google pages