Skip to content

Instantly share code, notes, and snippets.

View lispm's full-sized avatar

Rainer Joswig lispm

  • Germany
View GitHub Profile
; John McCarthy. Puzzle Solving Program in LISP. Memo 20, Artificial Intelligence Project
; http://www.bitsavers.org/pdf/mit/ai/aim/AIM-020.pdf
; 1960
; Common Lisp translation: Rainer Joswig, 2016, joswig@lisp.de
; basically the code is unchanged, but using s-expression syntax in Common Lisp
(defparameter pzl
'((a1 (a2 a5) 7.5)
(a2 (a1 a5 a9 a3) 3.5)
@lispm
lispm / rlabels.lisp
Last active November 12, 2023 00:19
rlabels : simple labels replacement, expanding to non-recursive code
; Copyright Rainer Joswig, 2023, joswig@lisp.de
; simple LABELS replacement, expanding to non-recursive code
; the goal is to provide a simple LABELS like operator
; which optimizes simple self-tail-recursive code to
; to a stack-less jump.
; limitations: does not detect when a call is NOT in tail position,
; which would require a code walker.
; A MICRO-MANUAL FOR LISP - NOT THE WHOLE TRUTH, 1978
; John McCarthy, Artificial Intelligence Laboratory, Stanford University
; https://www.ee.ryerson.ca/~elf/pub/misc/micromanualLISP.pdf
; https://github.com/jaseemabid/micromanual
; for CL : Rainer Joswig, joswig@lisp.de
; this version runs in a Common Lisp
; Implementing a loop via circular code in Common Lisp.
;
; This code could work with a Lisp interpreter, but not a Lisp compiler.
; #n= is a label for a s-expression
; #n# references a labeled s-expression
; note that we can use SBCL for this, too. We just have to switch to its interpreter.
#+sbcl (setf sb-ext:*evaluator-mode* :interpret)
;;; -*- Syntax: ANSI-Common-Lisp; Package: CL-USER -*-
;;; Author: Rainer Joswig, joswig@lisp.de, 2022
;;; This code is written in portable Common Lisp.
; https://adventofcode.com/2022/day/10
;; This solution makes use of multiple dispatch and standard method combinations of CLOS.
(defparameter *input-10*
@lispm
lispm / aoc2022-05.lisp
Last active December 30, 2022 21:25
Advent of Code, 2022, Day 05, Common Lisp solution by Rainer Joswig
;;; -*- Syntax: ANSI-Common-Lisp; Package: CL-USER -*-
;;; Author: Rainer Joswig, joswig@lisp.de, 2022
;;; This code is written in portable Common Lisp.
; https://adventofcode.com/2022/day/5
(defparameter *file05*
(if (member :lispm *features*)
(pathname "rjmbp:/Users/joswig/Lisp/aoc2022/input-5.txt")
@lispm
lispm / gist:4081687
Created November 15, 2012 22:09
defining a logical pathname LIB: for the LispWorks library
(setf (logical-pathname-translations "LIB")
`(("**;*" ,(make-pathname
:name :wild
:directory (append (pathname-directory
(sys:lisp-library-directory))
(list :wild-inferiors))
:defaults (sys:lisp-library-directory)))))
; now you can use the logical pathname LIB to refer to LispWorks files:
; (compile-file-if-needed "lib:examples;editor;commands;space-show-arglist.lisp" :load t)
;;; -*- Syntax: ANSI-Common-Lisp; Package: (LEXICAL-ANALYZER :USE CL) -*-
;; From: https://rosettacode.org/wiki/Compiler/lexical_analyzer#Common_Lisp
;; minor changes by Rainer Joswig, joswig@lisp.de, 2022
#+genera
(cl:require "GRAY-STREAMS")
(cl:defpackage #:lexical-analyzer
@lispm
lispm / basicinterpreter.lisp
Last active January 19, 2022 13:03
Basic Interpreter, sectorlisp example translated to Common Lisp
; source https://github.com/woodrush/sectorlisp-examples/blob/main/lisp/basic.lisp
; Common Lisp translation: joswig@lisp.de, 2022
; https://gist.github.com/lispm/a2f56a1a6dc5599a039eb7134d99cd4a
(defun basic-example ()
(BASICINTERPRETER
(QUOTE (
(10 REM FIND AND PRINT PRIME NUMBERS BELOW N_MAX. )
(20 LET N_MAX = (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) )
(30 LET I = (1 1) )
@lispm
lispm / gist:e028d3f3c11c9f74d4e7
Created December 5, 2014 14:16
some clever sorting
(defun split-alphanumeric-string (string)
(let ((pos0 0)
(pos1 0) )
(labels ((end-pos-of (fn)
(loop while (and (< pos1 (length string))
(funcall fn (aref string pos1)))
do (incf pos1))
pos1))
(loop while (< pos0 (length string))
when (not (digit-char-p (aref string pos0)))