Factors of an integer: Difference between revisions

(→‎{{header|AppleScript}}: Simpler closures)
Line 256:
<lang AppleScript>-- integerFactors :: Int -> [Int]
on integerFactors(n)
script mf
-- isFactor :: Int -> Bool
on isFactor(x)
(n of my closure) mod x = 0
end isFactor
-- integerQuotient :: Int -> Int
on integerQuotient(x)
((n of my closure) / x) as integer
end integerQuotient
end script
if n = 1 then
{1}
Line 274 ⟶ 262:
set intRoot to realRoot as integer
set blnPerfectSquare to intRoot = realRoot
-- isFactor :: Int -> Bool
script mfisFactor
on isFactorlambda(x)
(n of my closure) (n mod x) = 0
end lambda
end isFactorscript
-- Factors up to square root of n,
set lows to filter(mClosure(isFactor of mf, {n:n}), range(1, intRoot))
-- integerQuotient :: Int -> Int
onscript integerQuotient(x)
on lambda(x)
((n of my closure) (n / x) as integer
end lambda
end integerQuotientscript
-- and quotients of these factors beyond the square root.
lows & map(mClosure(integerQuotient of mf, {n:n}), ¬
items (1 + (blnPerfectSquare as integer)) thru -1 of reverse of lows)
end if
end integerFactors
 
 
-- TEST
on run
Line 337 ⟶ 339:
-- mReturn :: Handler -> Script
on mReturn(f)
if class of f is script then return f
script f
else
property lambda : f
end script
property lambda : f
end mReturn
end script
 
end scriptif
-- mClosure :: Handler -> Record -> Script
end mReturn</lang>
on mClosure(f, recBindings)
script
property closure : recBindings
property lambda : f
end script
end mClosure</lang>
 
{{Out}}
9,655

edits