Forward difference: Difference between revisions
→{{header|AppleScript}}: Updated primitives
(→{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details) |
(→{{header|AppleScript}}: Updated primitives) |
||
Line 163:
{{Trans|JavaScript}}
<lang AppleScript>--
on forwardDifference(n, xs)
set lng to length of xs
Line 172 ⟶ 174:
property ndx : n
on
(atLength's fullLength) - (length of ds) ≥ atLength's ndx
end
end script
-- fd :: [Int] -> [Int]
script fd
on
script minus
on
a - b
end
end script
zipWith(minus, tail(xs), xs)
end
end script
Line 194 ⟶ 196:
-- TEST
on run
set xs to {90, 47, 58, 29, 22, 32, 55, 5, 55, 73}
script test
on
intercalate(" -> [",
{{n}} & intercalate(", ", forwardDifference(n, xs))) & "]"
end
end script
intercalate(linefeed, map(test,
end run
-- GENERIC FUNCTIONS
-- enumFromTo :: Int -> Int -> [Int]
▲-- GENERIC FUNCTIONS ------------------------------------------------------------------------------
-- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]▼
set d to -1▼
on zipWith(f, xs, ys)▼
set nx to length of xs▼
set ny to length of ys▼
if nx < 1 or ny < 1 then▼
{}▼
else
set
set lst to {}▼
tell mReturn(f)▼
repeat with i from 1 to lng▼
set end of lst to lambda(item i of xs, item i of ys)▼
end repeat▼
return lst▼
end tell▼
end if
end zipWith▼
repeat with i from m to n by d▼
set end of lst to i▼
end repeat▼
return lst▼
end enumFromTo
--
on
set {dlm, my text item delimiters} to {my text item delimiters, strText}▼
set mp to mReturn(p)▼
set
set my text item delimiters to dlm▼
end intercalate▼
repeat until mp's lambda(v)▼
end repeat▼
end tell▼
return v▼
end |until|▼
-- map :: (a -> b) -> [a] -> [b]
Line 248 ⟶ 241:
set lst to {}
repeat with i from 1 to lng
set end of lst to
end repeat
return lst
end tell
end map
-- min :: Ord a => a -> a -> a
on min(x, y)
▲ else
x
end if▼
-- Lift 2nd class handler function into 1st class script wrapper
Line 261 ⟶ 263:
else
script
property
end script
end if
end mReturn
▲-- range :: Int -> Int -> [Int]
▲on range(m, n)
▲ if n < m then
▲ set d to -1
▲ else
▲ end if
▲ repeat with i from m to n by d
▲ set end of lst to i
▲ end repeat
▲ return lst
▲end range
▲ set {dlm, my text item delimiters} to {my text item delimiters, strText}
▲ set my text item delimiters to dlm
▲end intercalate
-- tail :: [a] -> [a]
Line 297 ⟶ 277:
end tail
--
on
set v to
tell
▲ return v
▲end |until|
▲-- zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
▲on zipWith(f, xs, ys)
▲ end repeat
▲ end tell
▲end zipWith</lang>
{{Out}}
<pre>1 -> [-43, 11, -29, -7, 10, 23, -50, 50, 18]
|