Proper divisors: Difference between revisions

→‎{{header|AppleScript}}: Simpler closures, updated primitives
(→‎{{header|AppleScript}}: Simpler closures, updated primitives)
Line 297:
<lang AppleScript>-- properDivisors :: Int -> [Int]
on properDivisors(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 315 ⟶ 303:
set intRoot to realRoot as integer
set blnPerfectSquare to intRoot = realRoot
-- isFactor :: Int -> Bool
onscript isFactor(x)
on lambda(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))
-- and quotients of these factors beyond the square root,
a
-- integerQuotient :: Int -> Int
onscript integerQuotient(x)
on lambda(x)
((n of my closure) (n / x) as integer
end lambda
end integerQuotientscript
-- excluding n itself (last item)
items 1 thru -2 of (lows & map(mClosure(integerQuotient of mf, {n:n}), ¬
items (1 + (blnPerfectSquare as integer)) thru -1 of reverse of lows))
end if
Line 327 ⟶ 330:
 
 
-- TEST
 
-- TESTING
 
-- numberAndDivisors :: Int -> [Int]
on numberAndDivisors(n)
{num:n, divisors:properDivisors(n)}
end numberAndDivisors
 
-- maxDivisorCount :: Record -> Int -> Record
on maxDivisorCount(a, n)
set intDivisors to length of properDivisors(n)
if intDivisors ≥ divisors of a then
{num:n, divisors:intDivisors}
else
a
end if
end maxDivisorCount
 
on run
-- numberAndDivisors :: Int -> [Int]
on script numberAndDivisors(n)
propertyon lambda : f(n)
{num:n, divisors:properDivisors(n)}
end lambda
scriptend mfscript
-- maxDivisorCount :: Record -> Int -> Record
end script maxDivisorCount
on lambda(a, n)
set intDivisors to length of properDivisors(n)
if intDivisors ≥ divisors of a then
{num:n, divisors:intDivisors}
else
a
end if
end lambda
end script
{oneToTen:map(numberAndDivisors, ¬
Line 415 ⟶ 420:
end script
end mReturn
 
-- mClosure :: Handler -> Record -> Script
on mClosure(f, recBindings)
script
property closure : recBindings
property lambda : f
end script
end mClosure
 
</lang>
9,658

edits