Adding Scheme to the list of fun
This commit is contained in:
parent
6b2df99faf
commit
44cea4add4
1 changed files with 85 additions and 0 deletions
85
ha-programming-scheme.org
Normal file
85
ha-programming-scheme.org
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
#+TITLE: Programming in Scheme for SICP
|
||||||
|
#+AUTHOR: Howard X. Abrams
|
||||||
|
#+EMAIL: howard.abrams@gmail.com
|
||||||
|
#+DATE: 2022-03-01
|
||||||
|
#+FILETAGS: :emacs:
|
||||||
|
|
||||||
|
A literate programming file configuring Emacs.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp :exports none
|
||||||
|
;;; ha-programming-scheme.el --- A literate programming file configuring Emacs. -*- lexical-binding: t; -*-
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2022 Howard X. Abrams
|
||||||
|
;;
|
||||||
|
;; Author: Howard X. Abrams <http://gitlab.com/howardabrams>
|
||||||
|
;; Maintainer: Howard X. Abrams
|
||||||
|
;; Created: March 1, 2022
|
||||||
|
;;
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
;;
|
||||||
|
;; *NB:* Do not edit this file. Instead, edit the original literate file at:
|
||||||
|
;; /Users/howard.abrams/other/hamacs/ha-programming-scheme.org
|
||||||
|
;; And tangle the file to recreate this one.
|
||||||
|
;;
|
||||||
|
;;; Code:
|
||||||
|
#+END_SRC
|
||||||
|
* Introduction
|
||||||
|
First, install MIT-Scheme, the Lisp dialect used throughout the book:
|
||||||
|
=brew install mit-scheme= or =sudo apt install mit-scheme= .
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
brew install mit-scheme
|
||||||
|
#+END_SRC
|
||||||
|
Ah, hell, we should install them all!
|
||||||
|
#+BEGIN_SRC sh
|
||||||
|
brew install guile racket chicken
|
||||||
|
#+END_SRC
|
||||||
|
* Install Scheme
|
||||||
|
The [[https://www.nongnu.org/geiser/][geiser project]] attempts to be the interface between Emacs and various Schemes.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package geiser
|
||||||
|
:init
|
||||||
|
(setq geiser-mit-binary "/usr/local/bin/scheme"
|
||||||
|
geiser-active-implementations '(mit))
|
||||||
|
|
||||||
|
:config
|
||||||
|
(use-package geiser-mit) ; Choose favorite
|
||||||
|
(add-to-list 'org-babel-load-languages '(scheme . t)))
|
||||||
|
#+END_SRC
|
||||||
|
* Install SICP
|
||||||
|
Let’s get the book available as an Info page:
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package sicp)
|
||||||
|
#+END_SRC
|
||||||
|
* Try it Out
|
||||||
|
#+BEGIN_SRC scheme :results value
|
||||||
|
(define (fib n)
|
||||||
|
(if (< n 2) 1
|
||||||
|
(+ (fib (- n 1)) (fib (- n 2)))))
|
||||||
|
|
||||||
|
(fib 5)
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
* Technical Artifacts :noexport:
|
||||||
|
Looks like we need this, at least, temporarily.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(add-to-list 'auto-mode-alist '("\\.info\\'" . Info-mode))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
Let's =provide= a name so we can =require= this file:
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp :exports none
|
||||||
|
(provide 'ha-programming-scheme)
|
||||||
|
;;; ha-programming-scheme.el ends here
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
#+DESCRIPTION: A literate programming file configuring Emacs.
|
||||||
|
|
||||||
|
#+PROPERTY: header-args:sh :tangle no
|
||||||
|
#+PROPERTY: header-args:emacs-lisp :tangle yes
|
||||||
|
#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes
|
||||||
|
|
||||||
|
#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil
|
||||||
|
#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil
|
||||||
|
#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js
|
Loading…
Reference in a new issue