Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/254: Рейтинг темы: голосов - 254, средняя оценка - 4.70
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 20:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
пожалуйста:
Вижу и библиотеку random из C++11 перенесли.Что с поддержкой лямбда-выражений и юникода?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 20:59  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
Что с поддержкой лямбда-выражений и юникода?
Юникод - полная поддержка, лямбда-выражения - полная поддержка.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 21:07
Цитата Сообщение от S_el Посмотреть сообщение
.Что с поддержкой лямбда-выражений
даже "оператор стрелочка" есть xD
C++
1
auto twice  = function (int x) => x * 2;
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 21:08  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
даже "оператор стрелочка" есть xD
Кажется, есть.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 21:09
Dennis Ritchie, а так можно?
C++
1
writeln((function (int x) => x * 2)(someArg));
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 21:11  [ТС]
castorsky, я в лямбдах не силён. Даже никогда не пользовался.

Вот пример с оф. сайта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import std.stdio;
 
void main()
{
    auto i = 3;
    auto twice  = function (int x) => x * 2;
    auto square = delegate (int x) => x * x;
 
    auto n = 5;
    auto mul_n = (int x) => x * n;
 
    writeln(twice(i));   // prints 6
    writeln(square(i));  // prints 9
    writeln(mul_n(i));   // prints 15
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 21:23
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Вот пример с оф. сайта
Это я и так уже видел. В примере реализация связывается с именем, но нет пример вызова анонимной (не связанной с именем) функции. Вы же дэшник, с Вас и спрос.

Добавлено через 2 минуты
работает
C++
1
2
3
4
5
6
import std.stdio;
 
void main()
{
    writeln((function (int x) => x * 2)(2));
}
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 21:44  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Вы же дэшник, с Вас и спрос.
Я тоже хочу вас спросить: а где использовать на деле эти лямбда-выражения? Чем они могут помочь?

Добавлено через 16 минут
Чем этот код:
C++
1
2
3
4
5
6
7
8
import std.stdio;
 
void main()
{
    auto twice = function (int x) => x * 2;
 
    writeln(twice(3));   // prints 6
}
лучше или круче этого:
C++
1
2
3
4
5
6
7
8
9
10
11
import std.stdio;
 
void main()
{
    int twice(int x) {
        x *= 2;
        return x;
    }
 
    writeln(twice(3));   // prints 6
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 21:54
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Я тоже хочу вас спросить: а где использовать на деле эти лямбда-выражения?
где пожелаете, главное чтобы это не усложняло читабельность. На самом деле это не просто "выражения", а математическия модель.
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Чем они могут помочь?
фвп же, а как Вы думаете работают дэшные map, reduce и т.д.? Принимают функцию в качестве аргумента (по крайней мере должны так делать) и поэлементно изменяют последовательность (массив, список, etc) с помощью функции.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 21:56
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
а где использовать на деле эти лямбда-выражения? Чем они могут помочь?
Вот,переписал ваш пример с числовыми массивами с D на C++ с применением лямбда-выражений:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
# include <valarray>
using namespace std;
 
int main() {
    valarray<double> a = {0.5, -0.5, 1.5, 2.0};
    valarray<double> b = {3.5, 5.5, 3.0, -1.0};
    valarray<double> c = ((a+b).apply([](double x){return x+1;}))/2.0;
    
    for (size_t n=0; n<c.size(); n++)
      cout << ' ' << c[n];
    
    return 0;
}
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.02.2015, 22:07  [ТС]
Цитата Сообщение от S_el Посмотреть сообщение
Вот,переписал ваш пример с числовыми массивами с D на C++ с применением лямбда-выражений:
Мощно.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 22:23
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Мощно.
а так?
Lisp
1
2
3
(let ((a '(0.5 -0.5 1.5 2.0))
      (b '(3.5 5.5 3.0 -1.0)))
  (map (lambda (x y) (/ (add1 (+ x y)) 2)) a b))
0
Заблокирован
13.02.2015, 22:30
castorsky, по-моему на F# понятнее выглядит:

Code
1
2
3
let a = [0.5; -0.5; 1.5; 2.0];
let b = [3.5; 5.5; 3.0; -1.0];
(List.map2 (fun x y -> (x + y + 1.0)/2.0) a b) |> printfn "%A"
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 22:35
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
по-моему на F# понятнее выглядит:
Да так будет выглядеть почти на каждом языке поддерживающем функциональную парадигму.Тема то не об этом
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 22:38
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
понятнее выглядит
а мне вот "оператор стрелочка" непонятен xD. Понятнее для Вас потому что инфиксная нотация арифметических выражений лично Вам привычна. Лисповая let-форма не только связывает имена и значения, она еще и создает внутреннюю область видимости.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 22:46
А мне вот такая штука не совсем понятна:
Code
1
|>
это что, перенаправление в поток?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
13.02.2015, 22:53
Цитата Сообщение от S_el Посмотреть сообщение
Да так будет выглядеть почти на каждом языке поддерживающем функциональную парадигму.
Возможно. Я удивлен что valarray не имеет методов begin, end. Приходится как всегда в крестах костылить begin(vallaray), etc. Но Ваш пример плох не этим, а тем что три раза пробегает по массиву, когда можно один. Но это тоже будет некрасиво.

Добавлено через 2 минуты
Цитата Сообщение от castorsky Посмотреть сообщение
она еще и создает внутреннюю область видимости
Lisp
1
2
3
4
5
6
7
8
9
10
> ;; racket-lang.org
(define foo
  (lambda ()
    (let ((foo 1))
      (+ foo
         (let ((foo (add1 foo)))
           (/ 1. foo))))))
> (foo)
1.5
>
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 22:55
Цитата Сообщение от castorsky Посмотреть сообщение
Я удивлен что valarray не имеет методов begin, end.
Добавили как шаблонные функции в C++11.Надо будет писать begin(varrname)

Цитата Сообщение от castorsky Посмотреть сообщение
Но Ваш пример плох не этим, а тем что три раза пробегает по массиву, когда можно один. Но это тоже будет некрасиво.
И как это реализовать?

Цитата Сообщение от castorsky Посмотреть сообщение
Но Ваш пример плох не этим, а тем что три раза пробегает по массиву, когда можно один.
0
Заблокирован
13.02.2015, 22:59
Цитата Сообщение от S_el Посмотреть сообщение
А мне вот такая штука не совсем понятна:
S_el, Прямой конвейерный оператор позволяет переупорядочить параметры функции так, что при вызове функции последний ее параметр указывается первым
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
13.02.2015, 23:00
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Прямой конвейерный оператор позволяет переупорядочить параметры функции так, что при вызове функции последний ее параметр указывается первым
И в чем польза?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Закрытая тема Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru