On Sunday, 21 June 2015 at 03:23:18 UTC, Dennis Ritchie wrote:
Recently published documentation Nightly Rust. I saw this:
https://doc.rust-lang.org/nightly/book/slice-patterns.html
What do you think about this: a terrible thing or a cool
feature?
fn is_symmetric(list: &[u32]) -> bool {
match list {
[] | [_] => true,
[x, inside.., y] if x == y => is_symmetric(inside),
_ => false
}
}
fn main() {
let sym = &[0, 1, 4, 2, 4, 1, 0];
assert!(is_symmetric(sym));
let not_sym = &[0, 1, 7, 2, 4, 1, 0];
assert!(!is_symmetric(not_sym));
}
http://is.gd/TvrXSn
I see this competition slices of D. Also seen are not very
clear design.
We can do this in D:
bool is_symmetric(T)(T[] arr)
{
if (arr.length == 0 || arr.length == 1)
return true;
if (arr[0] == arr[$])
return is_symmetric(arr[1..$-1]);
return false;
}
and generally match subranges using strides:
arr[stride..index]
where both stride and index can be arbitrary expressions.
and in higher dimensions with Ilya's and Joakim libraries.
Also implicit declaration of variables. Urgh.