Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions ch6-lists.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@

(defun dwim-map (fn seq &rest seqs)
"A thin wrapper over MAP that uses the type of the first SEQ for the result."
(apply 'map (type-of seq) fn seqs))
(apply 'map (type-of seq) fn (cons seq seqs)))

(deftest dwim-map ()
(should be equal '(5 7 9)
(dwim-map '+ '(1 2 3)
'(4 5 6))))

(defun simple-mapcar-v1 (fn list)
(let ((rez (list)))
Expand Down Expand Up @@ -32,7 +37,7 @@
(defun our-cons2 (data list)
(when (null list) (setf list (make-our-own-list)))
(let ((new-head (make-list-cell2
:data data
:data data
:next (rtl:? list 'head))))
(when (rtl:? list 'head)
(setf (rtl:? list 'head 'prev) new-head))
Expand Down
15 changes: 15 additions & 0 deletions ch7-kvs.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@
(should be equal '((:bar . :baz))
(alist-del :foo (list (cons :foo 42) (cons :bar :baz)))))

(defmethod generic-elt ((obj vector) key &rest keys)
(declare (ignore keys))
;; Python-like handling of negative indices as offsets from the end
(when (minusp key) (setf key (+ (length obj) key)))
(aref obj key))

(deftest generic-elt-vector ()
(let ((vec #(1 2 3)))
(should be equal 1 (generic-elt vec 0))
(should be equal 2 (generic-elt vec 1))
(should be equal 3 (generic-elt vec 2))
(should be equal (generic-elt vec 0) (generic-elt vec -3))
(should be equal (generic-elt vec 1) (generic-elt vec -2))
(should be equal (generic-elt vec 2) (generic-elt vec -1))))

(defun start-memoizing (fn)
(stop-memoizing fn)
(setf (symbol-function fn)
Expand Down
23 changes: 20 additions & 3 deletions errata.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,25 @@
# Errata for *Programming Algorithms in Lisp*

On **page xx** [Summary of error]:

Details of error here. Highlight key pieces in **bold**.
On **page 79** Function `dwim-map` leaves the first sequence out. It should be:

```
(defun dwim-map (fn seq &rest seqs)
"A thin wrapper over MAP that uses the type of the first SEQ for the result."
(apply 'map (type-of seq) fn (cons seq seqs)))
```

***

On **page 109** Method `generic-elt` for vectors calculated index wrong for
negative keys. It should be:

```
(defmethod generic-elt ((obj vector) key &rest keys)
(declare (ignore keys))
;; Python-like handling of negative indices as offsets from the end
(when (minusp key) (setf key (+ (length obj) key)))
(aref obj key))
```

***

Expand Down
4 changes: 2 additions & 2 deletions progalgs.asd
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
(in-package #:asdf-user)

(defsystem #:progalgs
:version "1.1"
:version "1.2"
:description "Code for the book 'Programming Algorithms in Lisp'"
:author "Vsevolod Dyomkin <vseloved@gmail.com>"
:maintainer "Vsevolod Dyomkin <vseloved@gmail.com>"
:depends-on (#:rutils #:eager-future2 #:sha1 #:lparallel #:should-test)
:depends-on (#:rutils #:eager-future2 #:sha1 #:lparallel #:should-test #:flexi-streams)
:serial t
:components ((:file "package")
(:file "ch1-complexity")
Expand Down