Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.70/254: Рейтинг темы: голосов - 254, средняя оценка - 4.70
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 18:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Кстати, забыл сказать, что в D понятия map не существуют за ненадобностью. Ассоциативный массив в D - это обычный массив int[string], string[string] и т. д.
В ди полуфункциональный map, деструктивный, в c++ это форич (который тоже какого-то художника деструктивный). Для ремесленников вобщем.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 18:31  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
В ди полуфункциональный map, деструктивный, в c++ это форич (который тоже какого-то художника деструктивный).
castorsky, не понял, а при чём тут ассоциативный массив map (ключевое слово map в D означает совсем не ассоциативный массив, а лямбда-функцию) и цикл foreach?
Цитата Сообщение от castorsky Посмотреть сообщение
Для ремесленников вобщем.
Добро пожаловать в world C# без ремесленничества!
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 18:39
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
не понял, а при чём тут ассоциативный массив map
при том что только в крестах map - это ассоциативный массив, а в нормальных языках есть такие термины как mapping, filtering, folding. То, что в ди есть map в крестах называется форичем.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 18:45  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
То, что в ди есть map в крестах называется форичем.
Не согласен. То, что в C++ является foreach'ем и в D является foreach'ем. Просто возможности D-шного форича намного шире. Из D-шных форичей тоже можно вызывать функции: foreach (i, elem; foo(a)) {} или foreach (i, elem; arr.parallel) {}.
По-моему, вы придумали очень плохое сравнение. Насколько я знаю, D-шного map'a в C++ просто нет.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 19:08
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
По-моему, вы придумали очень плохое сравнение
м.б. я просто не достаточно точно изъясняюсь. Говоря что "в D понятия map не существуют за ненадобностью", Вы забываете что map в ди есть и он такой каким должен быть (в общих чертах), в отличе от. Это как и принято в нормальном обществе - функция высшего порядка. Впрочем любому лисперу это известно, в отличие от.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 19:21  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
map в ди есть и он такой каким должен быть (в общих чертах), в отличе от.
Значит, это в C++ насолили неправильный рассол.
MrGluck, а не могли бы рассказать, что ваша программа делает? А то как-то до людей заграничных никак не доходит, и до меня тоже до сих пор не дошло. Чего-то мне кажется, что это какой-то хитрый код эксперта C++.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 19:23
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Значит, это в C++ насолили неправильный рассол.
сам c++ это вообще нонсенс.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 19:25  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
сам c++ это вообще нонсенс.
Зато мозг можно натренировать в нужную сторону, если не сломается раньше.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.03.2015, 19:30
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
MrGluck, а не могли бы рассказать, что ваша программа делает?
Я спецом подписал
Цитата Сообщение от MrGluck Посмотреть сообщение
Хочется за О(1) в среднем определять метод-обработчик для входного параметра.
То есть на вход идёт строка и, в зависимости от того, что за слово она включает, вызывается один из трёх методов класса, который эту строку обрабатывает. И это происходит в среднем за константное время работы (ибо хэш).

Цитата Сообщение от castorsky Посмотреть сообщение
сам c++ это вообще нонсенс.
Ага. Жив вопреки хейтерам.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 19:34
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
а не могли бы рассказать, что ваша программа делает?
Такой вот Вы знаток, убили c++ этим вопросом. Ассоциативный массив, где key - строка, а value - функция. Ничего необычного в общем.
Lisp
1
2
((cadr (assoc "asdf" `(("fgh" ,sin) ("ghj" ,cos) ("asdf" ,exp)))) 2)
;7.38905609893065
Добавлено через 48 секунд
Цитата Сообщение от MrGluck Посмотреть сообщение
Ага. Жив вопреки хейтерам.
Да ради Бга, уродства в миру много.
0
11.03.2015, 19:40  [ТС]

Не по теме:

Цитата Сообщение от castorsky Посмотреть сообщение
Да ради Бга, уродства в миру много.
castorsky, он вам накостыляет по Lisp'у, если захочет. :D

0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 20:23
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
он вам накостыляет по Lisp'у, если захочет
Лучше я по крестам костыльну. Классы не использовал специально, т.к. не вижу в этом необходимости, есть замыкания. Программа выполняет то же что и описанный крестовый недокод.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(define (foo)
  (let ((foo1 (lambda (s) s))
        (foo2 (lambda (s) (list->string (reverse (string->list s)))))
        (foo3 (lambda (s) (string-append s ", " s " "))))
    (lambda (in)
      (match in
        ("first" foo1)
        ("second" foo2)
        ("third" foo3)
        (_ void)))))
 
(define (main)
  (define bar (foo))
  
  (for/list ([i '("first" "second" "third")])
    ((bar i) "poor c++")))
 
;> (main)
;'("poor c++" "++c roop" "poor c++, poor c++ ")
;>
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.03.2015, 21:02
Цитата Сообщение от castorsky Посмотреть сообщение
Ассоциативный массив, где key - строка, а value - функция.
Не совсем функция. Метод класса, строго удовлетворяющей указанной сигнатуре.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 21:07
Цитата Сообщение от MrGluck Посмотреть сообщение
Не совсем функция. Метод класса, строго удовлетворяющей указанной сигнатуре.
ну функция, метод, опустим формальности. Насчет сигнатуры не понял, она всех методов одна.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 21:08  [ТС]
Программу написал Ali Çehreli, автор одной из книг по D:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import std.stdio;
import std.range;
 
class A
{
public:
    alias Func = void delegate(A, string);
    static const Func[string] handlers;
    
    static this()
    {
        handlers = [ "first" : (A a, string b) => a.foo1(b),
            "second" : (A a, string b) => a.foo2(b),
            "third" : (A a, string b) => a.foo3(b) ];
    }
    
    void foo(string s)
    {
        const handler = s in handlers;
        if (handler) {
            (*handler)(this, s);
        }
        
        m_buf ~= s ~ ' ';
    }
    
protected:
    void foo1(string s)
    {
        writeln(s);
    }
    
    void foo2(string s)
    {
        writeln(s.retro);
    }
    
    void foo3(string s)
    {
        writefln("%s, %s", s, m_buf);
    }
    
    string m_buf;
}
 
void main()
{
    auto a = new A();
    a.foo("first");
    a.foo("second");
    a.foo("third");
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 21:10
для всех методов. fix
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
11.03.2015, 21:11  [ТС]
Один пользователь предложил такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import std.stdio, std.range;
 
class A
{
    alias Hook = void function(ref A, string);
    string m_buf;
    Hook[string] handlers;
    void foo(string s) {
        if (auto p = s in handlers)
            (*p)(this, s);
        m_buf ~= s ~ " ";
    }
    void register(string name, Hook hook) {
        handlers[name] = hook;
    }
}
 
void foo1(ref A a, string s) { writeln(s); }
void foo2(ref A a, string s) { writeln(s.retro); }
void foo3(ref A a, string s) { writeln(s, ", ", a.m_buf); }
 
void main() {
    A a = new A;
    a.register("first", &foo1);
    a.register("second", &foo2);
    a.register("third", &foo3);
    a.foo("first");
    a.foo("second");
    a.foo("third");
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 21:20
Если кто не понял, то в примере на схеме вызов (bar i) возвращает функцию, которая после уже вызывается вне bar с аргументом строкой. Чистый вариант кода, таскать. И при этом, foo1, ... не видны вне bar. Т.е. на сях это будет выглядеть в общем случае так
C
1
2
3
4
5
switch(arg){
  case CONST1: return foo1;
  case CONST2: return foo2;
  ...
}
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
11.03.2015, 21:41
Цитата Сообщение от castorsky Посмотреть сообщение
Если кто не понял
Я не понял, зачем прослойка foo → bar?

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(define foo
  (local
    ((define  foo1     identity)
     (define  foo2    (compose list->string reverse string->list))
     (define (foo3 s) (string-append s ", " s " ")))
    (match-lambda
      ("first"  foo1)
      ("second" foo2)
      ("third"  foo3)
      (_        void))))
 
(displayln
 (for/list ([i '("first" "second" "third")])
   ((foo i) "poor c++")))
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
11.03.2015, 21:47
Цитата Сообщение от korvin_ Посмотреть сообщение
Я не понял, зачем прослойка foo → bar?
Не нужно. По привычке написал.
Lisp
1
2
3
(define (main)  
  (for/list ([i '("first" "second" "third")])
    (((foo) i) "poor c++")))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Закрытая тема Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru