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