Arithmetic/Rational: Difference between revisions

Content added Content deleted
(Added Wren)
(added Ol)
Line 2,919: Line 2,919:
Sum of reciprocal factors of 523776 = 2 exactly
Sum of reciprocal factors of 523776 = 2 exactly


=={{header|Ol}}==
Otus Lisp has rational numbers built-in and integrated with all other number types.
<lang scheme>
(define x 3/7)
(define y 9/11)
(define z -2/5)

; demonstrate builtin functions:

(print "(abs " z ") = " (abs z))
(print "- " z " = " (- z))
(print x " + " y " = " (+ x y))
(print x " - " y " = " (- x y))
(print x " * " y " = " (* x y))
(print x " / " y " = " (/ x y))
(print x " < " y " = " (< x y))
(print x " > " y " = " (> x y))

; introduce new functions:

(define (+:= x) (+ x 1))
(define (-:= x) (- x 1))

(print "+:= " z " = " (+:= z))
(print "-:= " z " = " (-:= z))

; finally, find all perfect numbers less than 2^15:

(lfor-each (lambda (candidate)
(let ((sum (lfold (lambda (sum factor)
(if (= 0 (modulo candidate factor))
(+ sum (/ 1 factor) (/ factor candidate))
sum))
(/ 1 candidate)
(liota 2 1 (+ (isqrt candidate) 1)))))
(if (= 1 (denominator sum))
(print candidate (if (eq? sum 1) ", perfect" "")))))
(liota 2 1 (expt 2 15)))
</lang>
{{Out}}
<pre>
(abs -2/5) = 2/5
- -2/5 = 2/5
3/7 + 9/11 = 96/77
3/7 - 9/11 = -30/77
3/7 * 9/11 = 27/77
3/7 / 9/11 = 11/21
3/7 < 9/11 = #true
3/7 > 9/11 = #false
+:= -2/5 = 3/5
-:= -2/5 = -7/5
6, perfect
28, perfect
120
496, perfect
672
8128, perfect
30240
32760
</pre>
=={{header|ooRexx}}==
=={{header|ooRexx}}==
<lang ooRexx>
<lang ooRexx>