Skip to content

Instantly share code, notes, and snippets.

@tabdulradi
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tabdulradi/2d53ca02c5d61b3e6ff9 to your computer and use it in GitHub Desktop.
Save tabdulradi/2d53ca02c5d61b3e6ff9 to your computer and use it in GitHub Desktop.
SICP using JS > rational
function pair(a, b) {
return function(i) {
if (i === 0) return a
else return b
}
}
function head(p) {
return p(0)
}
function tail(p) {
return p(1)
}
var make_rat = pair
var numer = head
var denom = tail
function add_rat(r1, r2) {
var n = numer(r1) * denom(r2) + numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function sub_rat(r1, r2) {
var n = numer(r1) * denom(r2) - numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function mul_rat(r1, r2) {
var n = numer(r1) * numer(r2)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function div_rat(r1, r2) {
var n = numer(r1) * denom(r2)
var d = denom(r1) * numer(r2)
return make_rat(n, d)
}
function is_equal(r1, r2) {
return numer(r1) * denom(r2) === denom(r1) * numer(r2)
}
function print_rat(r) {
return "(" + numer(r) + "/" + denom(r) + ")"
}
debugger
var r1 = make_rat(25, 10)
var r2 = make_rat(2, 10)
var result = mul_rat(r1, r2)
print_rat(result)
function gcd(a,b) {
return b === 0 ? a : gcd(b, a % b);
}
function pair(a, b) {
return function(i) {
if (i === 0) return a
else return b
}
}
function head(p) {
return p(0)
}
function tail(p) {
return p(1)
}
var make_rat = pair
var numer = head
var denom = tail
function add_rat(r1, r2) {
var n = numer(r1) * denom(r2) + numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function sub_rat(r1, r2) {
var n = numer(r1) * denom(r2) - numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function mul_rat(r1, r2) {
var n = numer(r1) * numer(r2)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function div_rat(r1, r2) {
var n = numer(r1) * denom(r2)
var d = denom(r1) * numer(r2)
return make_rat(n, d)
}
function is_equal(r1, r2) {
return numer(r1) * denom(r2) === denom(r1) * numer(r2)
}
function print_rat(r) {
return "(" + numer(r) + "/" + denom(r) + ")"
}
function simplify(r) {
var n = numer(r)
var d = denom(r)
var divisior = gcd(n, d)
return make_rat(n/divisior, d/divisior)
}
function print_simplified_rat(r) {
return print_rat(simplify(r))
}
var r1 = make_rat(25, 10)
var r2 = make_rat(2, 10)
var result = mul_rat(r1, r2)
print_simplified_rat(result)
function gcd(a,b) {
return b === 0 ? a : gcd(b, a % b);
}
function pair(a, b) {
return function(i) {
if (i === 0) return a
else return b
}
}
function head(p) {
return p(0)
}
function tail(p) {
return p(1)
}
var make_rat = function(n, d){
var div = gcd(n, d)
pair(n/div, d/div)
}
var numer = head
var denom = tail
function add_rat(r1, r2) {
var n = numer(r1) * denom(r2) + numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function sub_rat(r1, r2) {
var n = numer(r1) * denom(r2) - numer(r2) * denom(r1)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function mul_rat(r1, r2) {
var n = numer(r1) * numer(r2)
var d = denom(r1) * denom(r2)
return make_rat(n, d)
}
function div_rat(r1, r2) {
var n = numer(r1) * denom(r2)
var d = denom(r1) * numer(r2)
return make_rat(n, d)
}
function is_equal(r1, r2) {
return numer(r1) * denom(r2) === denom(r1) * numer(r2)
}
function print_rat(r) {
return "(" + numer(r) + "/" + denom(r) + ")"
}
var r1 = make_rat(25, 10)
var r2 = make_rat(2, 10)
var result = mul_rat(r1, r2)
print_rat(result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment