Skip to main content

The Craft of Emacs

Types, errors and control flow

30 minutes

Here’s a copy of the code you’ve written:

(defunxx
()
(interactive)
(get-buffer-create"*xx*")
(switch-to-buffer"*xx*")
(erase-buffer)
(xx--insert-line"Skeins")
(xx--insert-line"======")
(let*
(
(strands
(xx--read-positive"No. strands: ")
)
(stitches
(xx--read-positive"No. stitches: ")
)
(skeins
(xx--num-skeinsstrandsstitches)
)
)
(xx--insert-line
(concat"No. strands: "
(number-to-stringstrands)
)
)
(xx--insert-line
(concat"No. stitches: "
(number-to-stringstitches)
)
)
(xx--insert-line
(concat"No. skeins: "
(number-to-stringskeins)
)
)
)
)
(defunxx--insert-line
(text)
(inserttext)
(newline)
)
(defunxx--num-skeins
(strandsstitches)
(ceiling
(/
(float
(*strandsstitches)
)
4800.0)
)
)
(defunxx--read-positive
(prompt)
(let
(
(input
(read-numberprompt)
)
)
(if
(and
(integerpinput)
(>input0)
)
input
(message"Enter an integer greater than 0.")
(sit-for1)
(xx--read-positiveprompt)
)
)
)
xx.el