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> |