我正在尝试学习一些 Rust 并开始实现二叉树。虽然插入和有序遍历看起来很容易,但我在删除方法中的借用检查器方面遇到了一些麻烦。
到目前为止的代码是:
use std::cmp::{Ordering, PartialOrd};
use std::fmt::Display;
struct Node<T> {
value: T,
left: Option<Box<Node<T>>>,
right: Option<Box<Node<T>>>,
}
impl<T: Display + PartialOrd> Node<T> {
fn new(val: T) -> Self {
Node {
value: val,
left: None,
right: None,
}
}
fn print_inorder(&self) {
print!("[");
self.inorder(|x| print!("{}, ", x));
print!("]\n")
}
fn inorder(&self, f: fn(&T)) {
if let Some(ref x) = self.left {
(*x).inorder(f);
}
f(&self.value);
if let Some(ref x) = self.right {
(*x).inorder(f);
}
}
fn insert(&mut self, val: …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个函数,从Haskell中的列表返回所有排列:
perms :: [a] -> [[a]]
perms [] = [[]]
perms xs = map (\y -> concat_each y (perms (list_without y xs))) xs
list_without :: (Eq a) => a -> [a] -> [a]
list_without x xs =
filter (\y -> not (y==x)) xs
concat_each :: a -> [[a]] -> [[a]]
concat_each x xs =
map (\y -> x:y) xs
Run Code Online (Sandbox Code Playgroud)
我认为在第3行中会发生:y是a和x是[a],所以list_without y xs是[a].
因此,perms(list_without ...) [[a]]
所以concat_each Y(烫发...)获取a和[[a]],导致[[a]]
所以地图的功能是a …