From 9fa67213bfe13f0fe63bcbdc1fbc93f220861b0d Mon Sep 17 00:00:00 2001 From: Tobias Eidelpes Date: Fri, 4 Nov 2022 18:38:25 +0100 Subject: [PATCH] Initial commit --- .gitignore | 43 ++++++++++++++++++++++++++++++++++++++ chapter2.lisp | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) create mode 100644 .gitignore create mode 100644 chapter2.lisp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45f2085 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data diff --git a/chapter2.lisp b/chapter2.lisp new file mode 100644 index 0000000..f43bac0 --- /dev/null +++ b/chapter2.lisp @@ -0,0 +1,58 @@ +(defun add-rat (x y) + (make-rat (+ (* (numer x) (denom y)) + (* (numer y) (denom x))) + (* (denom x) (denom y)))) + +(defun sub-rat (x y) + (make-rat (- (* (numer x) (denom y)) + (* (numer y) (denom x))) + (* (denom x) (denom y)))) + +(defun mul-rat (x y) + (make-rat (* (numer x) (numer y)) + (* (denom x) (denom y)))) + +(defun div-rat (x y) + (make-rat (* (numer x) (denom y)) + (* (numer y) (denom x)))) + +(defun equal-ratp (x y) + (= (* (numer x) (denom y)) + (* (numer y) (denom x)))) + +(defun make-rat (n d) + (let ((g (gcd n d))) + (cons (/ n g) (/ d g)))) + +(defun numer (x) (car x)) +(defun denom (x) (cdr x)) + +(defun print-rat (x) + (format t "~a/" (numer x)) + (format t "~a~%" (denom x))) + +;; Exercise 2.2 +(defun make-segment (start end) + (cons + (make-point (x-point start) (y-point start)) + (make-point (x-point end) (y-point end)))) + +(defun start-segment (segment) (car segment)) +(defun end-segment (segment) (cdr segment)) + +(defun average (x y) + (/ (+ x y) 2)) +(defun midpoint-segment (segment) + (make-point (average (x-point (start-segment segment)) + (x-point (end-segment segment))) + (average (y-point (start-segment segment)) + (y-point (end-segment segment))))) + +(defun make-point (x y) + (cons x y)) + +(defun x-point (point) (car point)) +(defun y-point (point) (cdr point)) + +(defun print-point (p) + (format t "(~a,~a)~%" (x-point p) (y-point p)))