|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
#######
#
# E-scripts on Clojure.
#
# Note 1: use the eev command (defined in eev.el) and the
# ee alias (in my .zshrc) to execute parts of this file.
# Executing this file as a whole makes no sense.
# An introduction to eev can be found here:
#
# (find-eev-quick-intro)
# http://angg.twu.net/eev-intros/find-eev-quick-intro.html
#
# Note 2: be VERY careful and make sure you understand what
# you're doing.
#
# Note 3: If you use a shell other than zsh things like |&
# and the for loops may not work.
#
# Note 4: I always run as root.
#
# Note 5: some parts are too old and don't work anymore. Some
# never worked.
#
# Note 6: the definitions for the find-xxxfile commands are on my
# .emacs.
#
# Note 7: if you see a strange command check my .zshrc -- it may
# be defined there as a function or an alias.
#
# Note 8: the sections without dates are always older than the
# sections with dates.
#
# This file is at <http://angg.twu.net/e/clojure.e>
# or at <http://angg.twu.net/e/clojure.html>.
# See also <http://angg.twu.net/emacs.html>,
# <http://angg.twu.net/.emacs[.html]>,
# <http://angg.twu.net/.zshrc[.html]>,
# <http://angg.twu.net/escripts.html>,
# and <http://angg.twu.net/>.
#
#######
# «.simple-forth» (to "simple-forth")
# «.simple-graphics» (to "simple-graphics")
# «.mal» (to "mal")
# «.cider» (to "cider")
# http://clojure.org
# (find-status "clojure")
# (find-vldifile "clojure.list")
# (find-udfile "clojure/")
# (find-zsh "installeddebs | sort | grep clojure")
# (find-zsh "availabledebs | sort | grep clojure")
# https://clojure.org/guides/getting_started
# https://clojure.org/guides/editors
# https://clojure.org/guides/structural_editing
# https://clojure.org/guides/repl/introduction
# https://clojure.org/guides/learn/clojure
# https://clojure.org/reference/reader
# https://clojure.org/api/api
# https://clojure.org/guides/weird_characters
# https://clojure.org/guides/destructuring
# https://clojure.org/guides/learn/clojure
https://clojure.org/guides/learn/functions#_multi_arity_functions
https://clojure.org/guides/learn/functions.html#_multi_arity_functions
#####
#
# A simple Forth interpreter
# 2011sep23
#
#####
# «simple-forth» (to ".simple-forth")
# (find-es "java" "clojure")
# http://nakkaya.com/2010/12/02/a-simple-forth-interpreter-in-clojure/
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
clojure -r
(ns forth
(:refer-clojure :exclude [pop!]))
(declare forth-eval)
(defn pop! [stack]
(let [first (first @stack)]
(swap! stack pop)
first))
(defn push! [stack item]
(swap! stack conj item))
(defn next-token [stream]
(if (. stream hasNextBigInteger)
(. stream nextBigInteger)
(. stream next)))
(defn init-env []
(let [stream (java.util.Scanner. System/in)
stack (atom '())
dict (atom {})
prim (fn [id f] (swap! dict assoc id f))]
(prim ".s" #(do (println "---")
(doseq [s @stack] (println s))
(println "---")))
(prim "cr" #(println))
(prim "+" #(push! stack (+ (pop! stack) (pop! stack))))
(prim "*" #(push! stack (* (pop! stack) (pop! stack))))
(prim "/" #(let [a (pop! stack)
b (pop! stack)]
(push! stack (/ b a))))
(prim "-" #(let [a (pop! stack)
b (pop! stack)]
(push! stack (- b a))))
(prim "dup" #(push! stack (first @stack)))
(prim "." #(println (pop! stack)))
(prim ":" #(let [name (next-token stream)
block (loop [b [] n (next-token stream)]
(if (= n ";")
b
(recur (conj b n) (next-token stream))))]
(prim name (fn [] (doseq [w block]
(forth-eval dict stack w))))))
[dict stack stream]))
(defn forth-eval [dict stack token]
(cond (contains? @dict token) ((@dict token))
(number? token) (push! stack token)
:default (println token "??")))
(defn repl [env]
(let [[dict stack stream] env
token (next-token stream)]
(when (not= token "bye")
(forth-eval dict stack token)
(repl env))))
(repl (init-env))
5 6 + 7 8 + *
.
cr
3 2 1 + *
. cr
: sq dup * ;
2 sq
.
bye
#####
#
# Simple graphics
# 2011sep24
#
#####
# «simple-graphics» (to ".simple-graphics")
# (find-books "__comp/__comp.el" "clojure")
# (find-joyofclojurepage (+ 33 52) "(def frame (java.awt.Frame.))")
# (find-joyofclojuretext "(def frame (java.awt.Frame.))")
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
clojure -r
(def frame (java.awt.Frame.))
(.setVisible frame true)
(.setSize frame (java.awt.Dimension. 200 200))
(defn xors [max-x max-y]
(for [x (range max-x) y (range max-y)]
[x y (bit-xor x y)]))
(doseq [[x y xor] (xors 200 200)]
(.setColor gfx (java.awt.Color. xor xor xor))
(.fillRect gfx x y 1 1))
#####
#
# mal
# 2023mar31
#
#####
# «mal» (to ".mal")
# https://emacsninja.com/posts/implementing-mal.html
# https://github.com/kanaka/mal
# https://github.com/kanaka/mal/blob/master/process/guide.md
# (find-git-links "https://github.com/kanaka/mal" "mal")
# (find-gitk "~/usrc/mal/")
# (code-c-d "mal" "~/usrc/mal/")
# (find-malfile "")
# (find-malfile "impls/lua/")
# (find-malfile "impls/tcl/")
# (find-malfile "process/")
# (find-malfile "process/guide.md")
#####
#
# cider
# 2025feb03
#
#####
# «cider» (to ".cider")
# https://github.com/clojure-emacs/cider
# (code-c-d "cider" "~/usrc/cider/")
# (find-ciderfile "")
# (find-ciderfile "README.md")
https://github.com/cognitect-labs/transcriptor Convert REPL interactions into example-based tests.
https://news.ycombinator.com/item?id=33909241 Babashka is a fast-starting scripting environment for Clojure (medium.com/graalvm)
https://news.ycombinator.com/item?id=33962090 Clojure is a trinity of language, REPL, and structural editor (jakubholy.net)
https://news.ycombinator.com/item?id=36115321 Joker is a small interpreted dialect of Clojure written in Go (joker-lang.org)
https://news.ycombinator.com/item?id=35507001 REBL (datomic.com)
https://docs.datomic.com/cloud/other-tools/REBL.html
http://www.infoq.com/presentations/Simple-Made-Easy
https://docs.cider.mx/cider/index.html
https://download.clojure.org/papers/clojure-hopl-iv-final.pdf
https://rattlin.blog/bbgum.html
https://www.youtube.com/playlist?list=PLZdCLR02grLpIQQkyGLgIyt0eHE56aJqd Clojure/conj 2023
https://gaiwan.co/blog/why-clojure/
https://ertu.dev/posts/i-made-an-online-shooter-game-in-lisp/
https://wizardmasters.io/
https://news.ycombinator.com/item?id=42796906 I made a multiplayer shooter game in Lisp, here is my journey (ertu.dev)
https://www.youtube.com/watch?v=IOPz9I49snM
https://www.scattered-thoughts.net/writing/the-program-is-the-database-is-the-interface/
# Local Variables:
# coding: utf-8-unix
# End: