Coprimes: Difference between revisions

Content added Content deleted
m (added a category.)
Line 30: Line 30:
{{output}}
{{output}}
<lang applescript>{{17, 23}, {18, 29}}</lang>
<lang applescript>{{17, 23}, {18, 29}}</lang>


or, composing a definition and test from more general functions:
<lang applescript>------------------------- COPRIME ------------------------

-- coprime :: Int -> Int -> Bool
on coprime(a, b)
1 = gcd(a, b)
end coprime


--------------------------- TEST -------------------------
on run
script test
on |λ|(xy)
set {x, y} to xy
coprime(x, y)
end |λ|
end script
filter(test, ¬
{[21, 15], [17, 23], [36, 12], [18, 29], [60, 15]})
end run


------------------------- GENERIC ------------------------

-- abs :: Num -> Num
on abs(x)
-- Absolute value.
if 0 > x then
-x
else
x
end if
end abs


-- filter :: (a -> Bool) -> [a] -> [a]
on filter(p, xs)
tell mReturn(p)
set lst to {}
set lng to length of xs
repeat with i from 1 to lng
set v to item i of xs
if |λ|(v, i, xs) then set end of lst to v
end repeat
lst
end tell
end filter


-- gcd :: Int -> Int -> Int
on gcd(a, b)
set x to abs(a)
set y to abs(b)
repeat until y = 0
if x > y then
set x to x - y
else
set y to y - x
end if
end repeat
return x
end gcd


-- mReturn :: First-class m => (a -> b) -> m (a -> b)
on mReturn(f)
-- 2nd class handler function lifted into 1st class script wrapper.
if script is class of f then
f
else
script
property |λ| : f
end script
end if
end mReturn</lang>
{{Out}}
<pre>{{17, 23}, {18, 29}}</pre>


=={{header|Go}}==
=={{header|Go}}==