Exercises 2.5
Question
Represent a number using pairs.
Math module
-
The wiki explains the math theory Fundamental theorem of arithmetic
- Any number can represent by the product of primes.
-
We represent the number by using cons, and the car, cdr will extract a, b
(cons a b) -- 2a3b
(car integer) -- a
(cdr integer) -- b
Math Formulate
- We need to calculate the exponent and product.
- We need to calculate how many 'a' when divided by 2
- And 'b' also divided by 3
Algorithm
(cons a b)
(car integer)
- we need to calculate every integer divided by 2 and count how many '2' is there.
(cdr integer)
- The same as (car integer)
- We need to write a common procedure "(calculate how many n in m)"
- (calculate n m) -- k
- Use n to divide m, n/m, if (mod n m) > m, count++, if not, return count
conclusion after check the answer online
use the (reaminder n m) as an alternative option if the remainder is zero, then continue divided by 2, if not return count
Exercises 2.6
Meaning of the question
The question wants to show us that it can represent concept 'zero' and 'add' with out numbers.
Analyse the code of zero and add-1
- zero
Zero is a procedure.
paramenter is a procedure
-
return value is a procedure
- Return the parameter of zero's paramenter
- (zero (procedure-name parameter)) -- parameter
-
Meaning of zero
- The zero is somthing that return it self.
- Apply the 四则运算 to the function (zero) only the multiply will be fine.
- What if we apply for the other operators?
- (add-1 n)
- Parameter is a procedure named n
- return a procedure
- [ ] What is the meaning of the add on procedure?
- [ ] what is the f meaning in the procedure
- Analyse (add-1 zero)
[ ] Is this a procedure or value?
-
progress of this procedure
- (add-1 zero)
- (lambda (f) (lambda (x) (f ((zero f) x))))
- (lambda (f) (lambda (x) (f x)))
This procedure will return a procedure.
The parameter of (add-1 zero) is a procedure too.
This procedure is aiming at return the parameter(a procedure) it self.
-
[ ] What is the usage of this kind of procedure?
- It is a abstract procedure, use procedure to return procedure but do nothing.
- Is it the meaning of 'add zero' which means add nothing.
Church numeral
Church numeral is a meethod aiming to represent natural only using lambda.
For example when we want to represent 0
(add-1 zero)
(one)
(lambda (f) (lambda (x) (f ((zero f) x))))
(lambda (f) (lambda (x) (f x)))
(add-1 one)
(two)
(lambda (f) (lambda (x) (f ((one f) x))))
(lambda (f) (lambda (x) (f (f x))))
requierments
Write two procedure one two
Not in terms of zero and add-1
-
search the internet for the answer.
- What is the meaning of add?
- How to define one and two ?
- What is the usage of these things?
One and Two
When we try to use the substitution model we can get one and two directly
'''
(define one (lambda (f) (lambda (x) (f x))))
(define two (lambda (f) (lambda (x) (f (f x)))))
'''
Define plus of Church Numeral
We represent natrural number n with nth f, f^n Then the question is changed to how to implement the times concept in church numeral As we can imagine the procedure should be something like
(plus int1 int2) -- (int 3)
"it seems that we should use the recursive procedure to generate"
Compare to the (add-1 n) procedure
Examine (add-1 n) I find that
(f ((n f) x)) -- (f n)
n is the number represent in church numeral form, it takes f^n(x) = f...f(x)
And the parameter of n is f, aprocedure, after that it need a 'x' to be the parameter for the return value which is '((n f) x)'
So the ((n f) x) is just the number of church numeral. And the add procedure become (f n), which equals to f^n+1(x).
Write the procedure of Plus
The plus should be like f ((n m) x)
As we dicover that (n f x) is f^n(x), (m f x) is f^m(x)
What we want is f^m+n (x), which is f^m f^n(x)
So here is a question, which one is right (m f (n f x)) or (m (n f x) x)
(m f (n f x))
(m f f^n(x))
fm(fn(x))
(m (n f x) x)
(m f^n(x) x)
(fn(x))m(x)
This one is wrong.