Являются ли некоторые из исков Haskell of tacit programming переводимыми на Rust?Возможно ли скрытое программирование в Rust?
3
A
ответ
6
Вы можете попробовать создать макрос для этого:
#[feature(macro_rules)];
macro_rules! compose_inner(
($var:ident, $f:ident) => (
$f($var)
);
($var:ident, $f:ident $($rest:ident)+) => (
$f(compose_inner!($var, $($rest)+))
);
)
macro_rules! compose(
($($f:ident)+) => (
|x| compose_inner!(x, $($f)+)
)
)
fn foo(x: int) -> f64 {
(x*x) as f64
}
fn bar(y: f64) -> ~str {
(y+2.0).to_str()
}
fn baz(z: ~str) -> ~[u8] {
z.into_bytes()
}
fn main() {
let f = compose!(baz bar foo);
println!("{:?}", f(10));
}
макросы, вероятно, может быть проще, но вот что я придумал.
Но это, безусловно, не поддерживается в самом языке. В конце концов, ржавчина не является функциональным и конкатенативным языком.
Очень похожая идиома метод цепочки, который абсолютно поддерживается ржавчиной. Наиболее яркий пример, я думаю, будет итераторы преобразования:
let v: ~[int] = ...;
let x: int = v.iter().map(|x| x + 1).filter(|x| x > 0).fold(0, |acc, x| acc + x/2);
Правда, это не так гибко, как произвольная функция композиция, но выглядит гораздо более естественно и чувствует себя гораздо более удобным.
Смежные вопросы
- 1. Возможно ли скрытое объявление в проекте?
- 2. Возможно ли сделать внешнее скрытое перенаправление?
- 3. Является ли функциональное программирование в Rust zero-cost?
- 4. Возможно ли молчаливое программирование в Purescript?
- 5. Возможно ли сделать прототипное программирование в Scala?
- 6. Возможно ли реализовать обычную Iterator :: sum в Rust?
- 7. Возможно ли совпадение с указателем NULL в Rust?
- 8. Возможно ли предотвратить дублирование идентичных аргументов макросу в Rust?
- 9. Возможно наличие структуры/кортежа признаков в Rust?
- 10. Возможно программирование голосом
- 11. Как сделать программирование в реальном времени в Rust?
- 12. Возможно ли установить Rust на Linux без прав администратора?
- 13. Возможно ли запустить скрытое консольное приложение из службы Windows?
- 14. Программирование на лифте в реальном времени - возможно ли это?
- 15. Программирование задержки в скрипте javafx, возможно ли это?
- 16. Можно ли сделать рекурсивное закрытие в Rust?
- 17. Возможно работать со всеми членами однородной структуры/кортежа в Rust?
- 18. Возможно ли асинхронное программирование с C или C++?
- 19. Возможно ли такое молчаливое программирование на языке статистического программирования R?
- 20. Можно ли использовать глобальные переменные в Rust?
- 21. Программирование сокетов Java: возможно ли, чтобы серверный сокет инициировал связь?
- 22. Программирование MS-офиса с C# - возможно ли это?
- 23. Возможно ли программирование на Python для Logitech G15?
- 24. Проблемы с rust-http в rust-openssl
- 25. Структурирование данных в Rust
- 26. Есть ли блокировка файлов в Rust?
- 27. Как проверить, закончилась ли нить в Rust?
- 28. Есть ли Rust, эквивалентный `dynamic` в C#?
- 29. Могу ли я использовать лексер или парсер Rust для получения списка функций в файле Rust?
- 30. Есть ли обычный способ организации проекта Rust?