作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这不是家庭作业。我正在自己学习标准机器学习。我也知道一些 Scheme,所以这个问题应该可以用任何一种语言回答。
我自己强加的任务是编写一个函数来构造一个从 1 到 n 的整数列表。例如,list(7) 应该返回 [1,2,3,4,5,6,7]。 O(n) 解决方案将是理想的。
很容易在线性时间内反向构造一个列表(即 [n,n-1,..,1]):
fun list 1 = 1::nil
| list n = n::list(n-1);
fun list 1 = 1::nil
| list n = list(n-1) @ n::nil;
fun list n = (if n = 1
then 1
else list(n-1) :: n) :: nil;
最佳答案
使用 Basis Library ,
fun list n = List.tabulate (n, fn x => x + 1)
val list =
let fun list' k 0 = k
| list' k n = list' (n::k) (n-1)
in list' nil end
list 5
=> list' nil 5
=> list' (5::nil) 4
=> list' (4::5::nil) 3
=> list' (3::4::5::nil) 2
=> list' (2::3::4::5::nil) 1
=> list' (1::2::3::4::5::nil) 0
=> [1, 2, 3, 4, 5]
Something makes me think I need a helper function that builds un-terminated lists to be used in the recursion, but I'm stumped.
10::_
,您可以使用
fn x => 10::x
.
fun list n =
let fun list' m k = if m > n then k nil else
list' (m+1) (fn x => k (m::x))
in list' 1 (fn x => x) end
list 5
=> list' 1 (fn x => x)
=> list' 2 (fn x => (fn x => x) (1::x))
=> list' 3 (fn x => (fn x => (fn x => x) (1::x)) (2::x))
=> list' 4 (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x))
=> list' 5 (fn x => (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x)) (4::x))
=> list' 6 (fn x => (fn x => (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x)) (4::x)) (5::x))
=> (fn x => (fn x => (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x)) (4::x)) (5::x)) nil
=> (fn x => (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x)) (4::x)) (5::nil)
=> (fn x => (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::x)) (4::5::nil)
=> (fn x => (fn x => (fn x => x) (1::x)) (2::x)) (3::4::5::nil)
=> (fn x => (fn x => x) (1::x)) (2::3::4::5::nil)
=> (fn x => x) (1::2::3::4::5::nil)
=> [1, 2, 3, 4, 5]
关于functional-programming - 功能 : construct a list of integers 1. .n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/828765/
我是一名优秀的程序员,十分优秀!