Math Is Fun Forum
  Discussion about math, puzzles, games and fun.   Useful symbols: ÷ × ½ √ ∞ ≠ ≤ ≥ ≈ ⇒ ± ∈ Δ θ ∴ ∑ ∫ • π ƒ -¹ ² ³ °

You are not logged in.

#1 2012-12-19 07:15:16

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Lisp

To start a little Lisp discussion, here are two functions I wrote:

(defun fibonacci (n)
	(labels ((fib (n f)
		(if (or (zerop n) (eq n -1))
			(car f)
			(fib (- n 1)  (cons (+ (first f) (second f)) f ))
		)))
		(fib (- n 2) (1 1)))
)

(defun ints (n)
	(labels ((f (n acc)
		(if (zerop n)
			acc
			(f (- n 1) (cons n acc))
		)))
		(f n nil))
)

The first one is for calculating the nth Fibonacci number, and the second for generating a list of the first n positive integers.

You can test them by entering something like:

(mapcar #'fibonacci (ints 20))

Last edited by anonimnystefy (2012-12-19 08:40:07)


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#2 2012-12-19 21:37:36

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Anyone have an idea on what I could do next?


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#3 2012-12-19 22:07:25

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

Can you do graphics with it?

If so, it is the ideal language for fractals.

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#4 2012-12-19 22:12:41

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Not yet. I could learn that, though...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#5 2012-12-19 22:37:35

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

It should do the recursion really well and to quite a depth.

If it works, post up the pictures.

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#6 2012-12-19 22:42:43

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

How do I even start any work on graphics with Lisp?

Yes, it quite a capability for recursion.


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#7 2012-12-19 23:02:52

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

Our friend Mr Google will give you plenty of hits.  Lisp programmers seem to be pretty generous with their code/ideas.

But you'll need to add what implementation you are using.

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#8 2012-12-19 23:04:24

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

I tried Googling, but none of the things I tried worked...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#9 2012-12-20 00:28:22

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

What version of lisp?  What did you try?  (Just one at this stage)

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#10 2012-12-20 07:20:17

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

I use SBCL for CLisp.


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#11 2012-12-20 12:33:33

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Hi Bob

I have a package called "vecto". I am searching for instructions on using it...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#12 2012-12-20 15:52:57

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#13 2012-12-20 21:02:41

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Hi Bob

That is the page I found! I will try what I can today...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#14 2012-12-21 11:23:52

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Hi Bob

I have wrotten this code: http://pastebin.com/Je8PQMfX which should produce some kind of grayyscale Mandelbrot set, but it doesn't...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#15 2012-12-22 00:31:20

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

So what does it produce?

Have you worked up to this with simple stuff like draw a line, plot a pixel, shade an area etc.

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#16 2012-12-22 00:37:22

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Hi Bob

I edited my code a little bit:

(defun mandelbrot (size filename)
        (let ((img (make-8-bit-gray-image size size)))
                (declare (type 8-bit-gray-image img))
                (loop for i from 1 to (1- size) do
                        (loop for j from 1 to (1- size) do ;these two loops go through all pixels of the image
                                (labels ((mb-set (x y nit) ;nit is the number of the iteration
                                                (if (or (> (+ (* x x) (* y y)) 2) (> nit 1000)) ;this bit of code checks if the modulo of z is >2
                                                        (setf (pixel img i j) (round(/ 255.0 (1+ nit)))) ;if it is, this bit sets the current pixel to the appropriate shade of grey
                                                        (mb-set (+ (- (* x x) (* y y)) (/ (- j (round (/ size 2.0))) 50.0)) (+ (* 2 x y) (/ (- j (round (/ size 2.0))) 50.0)) (1+ nit)) ;if not, this bit sends new information into the next iteration
												)
										))
                                                (mb-set 0.0 0.0 0)
                                )
                        )
                )
                (write-jpeg-file filename img)
        )
)

but it produces the picture below...

View Image: mbset1.jpg

Last edited by anonimnystefy (2012-12-22 02:09:52)


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#17 2012-12-22 01:31:27

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

Ok.  A common mistake which you can easily fix:

There are no comments / remarks / annotation to go with this code.

smile

Bob

LATER EDIT

When you recompute x and y you need to store the new x temporarily whilst computing the new y, else you use the wrong x.

Recommend you don't call mb-set again until you have reset values in some extra lines of code, rather than packing all into a single line.


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#18 2012-12-22 02:05:55

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Hi Bob

The variable x is never reassigned once in the function...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#19 2012-12-22 02:07:55

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

Sorry.  Was just about to re-edit that load of rubbish.

how about

(mb-set (+ (- (* x x) (* y y)) (/ (- j (round (/ size 2.0))) 50.0)) (+ (* 2 x y) (/ (- j (round (/ size 2.0))) 50.0)) (1+ nit))
                                                )))

I see no i in that line.

Bob


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#20 2012-12-22 02:16:29

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Bob, you are brilliant!

The picture is given below.

View Image: mbset.jpg

“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#21 2012-12-22 03:21:08

bob bundy
Moderator
Registered: 2010-06-20
Posts: 6,421

Re: Lisp

That's a great fractal.  Well done!

So you could (i) improve the resolution or (ii) add colour or (iii) do a new fractal.

smile

Bob

btw  Is now a good moment to admit I cannot program in Lisp ?  I was bluffing!


You cannot teach a man anything;  you can only help him find it within himself..........Galileo Galilei

Offline

#22 2012-12-22 03:34:47

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

I am going with (i) first.

The other two will have to wait a bit...


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

#23 2013-05-17 16:21:56

Agnishom
Real Member
From: The Complex Plane
Registered: 2011-01-29
Posts: 17,135
Website

Re: Lisp

Would you give a link to download your compiler?

Last edited by Agnishom (2013-05-17 16:27:05)


'And fun? If maths is fun, then getting a tooth extraction is fun. A viral infection is fun. Rabies shots are fun.'
'God exists because Mathematics is consistent, and the devil exists because we cannot prove it'
'You made a human being happy! There is no further achievement.' -bobbym

Online

#24 2013-11-15 00:24:04

Agnishom
Real Member
From: The Complex Plane
Registered: 2011-01-29
Posts: 17,135
Website

Re: Lisp

Hi stefy;

What is a good way to learn Lisp?


'And fun? If maths is fun, then getting a tooth extraction is fun. A viral infection is fun. Rabies shots are fun.'
'God exists because Mathematics is consistent, and the devil exists because we cannot prove it'
'You made a human being happy! There is no further achievement.' -bobbym

Online

#25 2013-11-15 06:12:09

anonimnystefy
Real Member
From: The Foundation
Registered: 2011-05-23
Posts: 15,544

Re: Lisp

Well, I never learned it much, so I cannot say for sure, but what I used for learning was the book On Lisp which covers the basics. Just Google "onlisp.pdf".


“Here lies the reader who will never open this book. He is forever dead.

“Taking a new step, uttering a new word, is what people fear most.” ― Fyodor Dostoyevsky, Crime and Punishment

Offline

Board footer

Powered by FluxBB