Wolfram Language中基于Array的列表生成代码疑问咨询
Wolfram Language代码疑问解析
首先看你提供的代码:
a = 2; b = 7; h = (b-a)/n; x[0] = a; Array[x, n+1, 0]; For[i = 0, i < n + 1, i++, x[i] = a + h*i]
问题1:在未提前定义x的情况下,访问x[0]时是否会自动生成x的元素?
Wolfram Language里,x[0] = a这种写法不是操作数组元素,而是给符号x定义下标函数规则——不需要提前声明x,执行这条语句后,x就变成了一个函数,传入参数0时会返回a的值。后续的x[i]都是在给这个函数添加不同参数的返回规则,和传统数组的元素不是同一概念。
问题2:索引访问是否应该采用x[[i]]的形式?
没错,x[[i]]才是Wolfram Language中访问列表(数组)元素的标准语法。你代码里的x[i]是在定义函数x的参数映射,本质是函数而非数组。如果要生成区间内的数组,更规范的写法是用Table直接创建列表:x = Table[a + h*i, {i, 0, n}],之后用x[[i]]访问对应位置的元素。
问题3:此处未赋值的Array语句具体起到什么作用?
这条Array[x, n+1, 0];是完全多余的,没有实际作用。Array[x, m, k]的功能是生成{x[k], x[k+1], ..., x[k+m-1]}的列表,但你这里没有把这个列表赋值给任何变量,它只会临时计算后就被丢弃,既不会改变x的函数定义,也不会影响后续的For循环。这条语句可以直接删掉。
内容的提问来源于stack exchange,提问作者Maria Ayanyan
相关产品推荐
相关产品推荐

