首先,还是要吹捧一下这个编程语言。语法很严谨,Rust语言号称只要编译通过就不会崩溃(内存安全)。不像C 那种,概念混乱,连Bjarne Stroustrup都曾开玩笑说自己已经搞不懂C 了。而且一个报错信息就一万多行,然后必须是大师级的程序员,精通 Intel规范的汇编语言的那种C 程序员,才能搞清楚什么地方出了问题。个人认为Rust对于程序员的综合素质要求,是低于C 的。所以笔者决定将Rust作为首选。
下面牛刀小试一把。以函数式编程方式,计算数值积分。以定积分
为例。该积分精确值为-6.75.如果将积分区间500等分,计算结果为-6.723,相对误差为0.4%。Python以及C 编程实现点击这里:
函数式编程计算数值积分
Rust代码
代码语言:javascript复制fn main() {
let steps = 500; // 区间500等分
let a:f64 = 0.0;
let b:f64 = 3.0;
let dx = (b-a)/(steps as f64); //每个区间长度,注意整型变量显式转化成浮点型
let f = | x:f64 | {
x*x*x - 6.0*x
}; //闭包,相当于匿名函数,这里定义的是被积函数
let sub_area = | x:f64 | {
f(x)*dx
};//一个子区间的面积,还调用了被积函数
let res = (0..steps).map(|x| ( (x as f64) 1.0 )*dx ).map(|x| sub_area(x) ).sum::<f64>();
println!("结果为:{}", res)
}
程序中计算res的部分相当于C 里面的管道操作符。将{0,1,2,3,4,5,...,500}通过第一个map映射成每一个子区间中点,而第二个map就是通过子区间中点计算每一个子区间的面积。最后通过sum()函数累加起来。
Python入门容易,想要提高却很难。有一些机器学习的Python代码,很难理解。在学习一些底层语言比如C ,Rust之后,再去思考,就会容易一些了。
比如下面的问题:
代码语言:javascript复制use std::io::stdin;
fn main() {
println!("What is 3 2? Type your answer and press enter.");
let mut input = String::new();//字符串变量
stdin()
.read_line(&mut input)
.expect("Unable to read standard input");
if input == "5" {
println!("Correct!");
} else {
println!("Incorrect!");
}
}
键盘输入5,并由input接收,正常情况下input == "5"没毛病。可最后却输出"Incorrect!",为什么?原来我们在输入时按了enter键,n意味着换行。
代码语言:javascript复制use std::io::stdin;
fn main() {
println!("What is 3 2? Type your answer and press enter.");
let mut input = String::new();//字符串变量
stdin()
.read_line(&mut input)
.expect("Unable to read standard input");
if input.trim() == "5" {
println!("Correct!");
} else {
println!("Incorrect!");
}
}
用trim方法将input多余的去掉,最后输出"Correct!"