powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничная со-программа
25 сообщений из 54, страница 2 из 3
Тяпничная со-программа
    #39295099
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а с двумя переменными?
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295118
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizа с двумя переменными?
с конечным числом переменных в общем виде - никак
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295170
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видел поддержку сопрограмм в спецификации на С-- (которая в виде pdf).

Я так понял, что вся эта чехарда была только для того, чтобы Глазго Хаскель компилятор мог эффективно реализовать ФП.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295171
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и вроде бы потом GHC перешел на LLVM, значит и там подобное есть.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295178
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

не, хаскелю вообще по барабану, в LLVM для них уже добавили какую-то свою модель вызова им и так хватает

http://www.gamedev.ru/flame/forum/?id=184103
Скорее всего для того, что-бы вручную не писать конечные автоматы, ибо низкоуровневая конструкция
или возможно за go гонятся, для эффективной реализации.
геморно как-то на ассемблере переключатель писать, почти под каждую систему свой
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295185
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экспромтом.

Если бы C++ поддерживал goto c динамической меткой, то со-программа с множественным входами могла бы выглядеть так:

DemoFunc( params ..., Метка ) {

goto Метка;

Start1:
...
...
Start2:
...
...
StartXX:
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295217
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Экспромтом.

Если бы C++ поддерживал goto c динамической меткой, то со-программа с множественным входами могла бы выглядеть так:

DemoFunc( params ..., Метка ) {

goto Метка;

Start1:
...
...
Start2:
...
...
StartXX:о боже
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
enum Mark { Start1, Start2, StartXX };
void DemoFunc( params ..., Mark startmark )
{
   switch( startmark ) {
       case Start1:
          ...
          ...
      case Start2:
          ...
          ...
      case StartXX:
          ...
          ...
      default:
          throw std::exception( "Unknown start mark" );
   }
}
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295221
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychо боже
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
enum Mark { Start1, Start2, StartXX };
void DemoFunc( params ..., Mark startmark )
{
   switch( startmark ) {
       case Start1:
          ...
          ...
      case Start2:
          ...
          ...
      case StartXX:
          ...
          ...
      default:
          throw std::exception( "Unknown start mark" );
   }
}

Ужас!
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295233
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Ужас!ты ведь сам этого хотел, товарищ ))
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295241
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пора реализовывать рекурсивный итератор. Пробую на Scala... под катом - эксперименты.

Код: java
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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
  /**
    * mayton >> В топку Груви. Решил взять Scala. Экспериментирую. Пока не могу понять что нужно
    * Iterable? Collection? Stream? Списки в стили Lisp вида 1 :: 2 :: nil ...
    *
    * Даллее идет проба пера...
    */
  def getPosition(size:Int) : Position = {
    new Position(0,0)
  }

  /**
    * mayton >> Это гребаный список. Но мне нужен ленивый мать его список через yield...
    */
  def getPositionList(size:Int) : List[Position] = {
    List(new Position(0,0))
  }

  /**
    * mayton >> Итератор...
    */
  def getPositionIterator(size:Int) : Iterable[Position] = {
    List(new Position(0,0)).toIterable
  }

  /**
    * Это украдено у Хорсмана 'Scala'.... типа конструирование бесконечных списков
    * в стиле Лиспа. Здесь насколько я понял определена бесконечноая последовательность
    * целых начиная с n
    */
  def numsFrom(n:Int) : Stream[Int] = {
    n #:: numsFrom(n+1)
  }

  /**
    * Но у меня рекурретная формула. Мне больше подходит шаблон yield return
    * Как совокуплять эти хеши с двоеточиями в алгоритме - ХЗ ненадежно
    *
    * пробуем...
    *
    * Здесь Scala plugin ругнулся и предложил сделать варианты:
    * 1) add 'Collection BreakOut' argument
    * 2) change Stream[Int] to
    *
    * ну ладно пробуем...
    */
  //def numsFrom2(n:Int) : Stream[Int] = {
    //for(i <- n to Int.MaxValue) yield n
  //}

  def numsFrom2(n:Int) : Stream[Int] = {
    (for(i <- n to Int.MaxValue) yield n)(collection.breakOut)
  }

  def numsFrom3(n:Int) : IndexedSeq[Int] = {
    for(i <- n to Int.MaxValue) yield n
  }

  // Хм... странно следкющий пример не компилится
  // [ERROR] Illegal star of statement yield 1
  //                                   ^
  def numsFrom4(n:Int) : IndexedSeq[Int] = {
    yield 1
    yield 2
  }

...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295311
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295324
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КМК это не совсем то что я хотел.

Код: java
1.
2.
3.
4.
5.
6.
7.
getStatesOfChildNodes(node, path, deep) {
        return node.children
            .map((child, key) =>
                this.getState(node, child, key, path.concat(child.cost), deep + 1))
            .sort((a, b) =>
                a.node.cost - b.node.cost);
    }



Настораживает наличие вызова .sort(). Если это генерация списка с сортировкой то я это и так могу сделать в С++/Java
но весь цимес в том что я не хочу нигде хранить никаких списков. Мне нужен генератор который выдает
самый первый элемент настолько быстро, насколько это возможно.

Без промежуточных переливаний в массивы или списки. Мне нужен Stream.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39295432
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychты ведь сам этого хотел, товарищ )) ...
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296334
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем тебе для этой задачи сопрограммы, если достаточно ленивых списков?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
val p = 5
val u = 10

def a(i: Int): Stream[(Int, Int)] =
  if (i > 0)
    d(i - 1) #::: (u, 0) #:: a(i - 1) #::: (0, u) #:: a(i - 1) #::: (-u, 0) #:: c(i - 1)
  else Stream.empty

// аналогично определяем b, c, d

a(p).scanLeft((startX, startY))((a, b) => (a._1 + b._1, a._2 + b._2)).take(numPoints).foreach(...
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296476
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxer,

жесть, а в какой последовательности всё это вычисляется? точно "лениво"?


проще CreateFiber и SwitchToFiber использовать
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296553
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)fixxer,
жесть, а в какой последовательности всё это вычисляется? точно "лениво"?


В той последовательности как написано, да, точно лениво. #::: оператор конкатенации ленивых списков, #:: оператор присоединения головы к списку. Оба оператора правоассоциативны. То есть читать так:

Код: sql
1.
d(i - 1) #::: ( (u, 0) #:: ( a(i - 1) #::: ( (0, u) #:: ( a(i - 1) #::: ( (-u, 0) #:: c(i - 1) ) ) ) ) )



Правая часть не вычислится пока не попросишь.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296573
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxer, ну ... я-бы не стал противопоставлять один термин другому.

Если вы хотите называть это ленивым списком - я не против.

Я просто начал свои копания с уступчивого return и пришел к постановке вопроса.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296579
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)fixxer,

жесть, а в какой последовательности всё это вычисляется? точно "лениво"?


проще CreateFiber и SwitchToFiber использовать
Я-бы не хотел не акцентировать внимание на Windows API.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296582
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ-бы не хотел не акцентировать внимание на Windows API.
ну тогда для С++ только буст, собственно он под виндой, наверное, и использует fiber-ы
на асемблере писать под все архитектуры и ОС тоже не очень
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296585
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)maytonЯ-бы не хотел не акцентировать внимание на Windows API.
ну тогда для С++ только буст, собственно он под виндой, наверное, и использует fiber-ы
на асемблере писать под все архитектуры и ОС тоже не очень
Было-бы неплохо чтобы господин СтраусТруп подумал в этом направлении.
Если такое реализовать невозможно в рамках language (вовлечение сущностей
уровня kernel API в язык) то хотелось-бы видеть Note #... где такой
вопрос хотя-бы рассматривался.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296586
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fixxerПравая часть не вычислится пока не попросишь.
Спасибо. Я попробую ваш пример сегодня. Может это и будет мое решение.
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296593
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ну собственно как-то как показал fixxer и разлагается любая рекурсия

1. нанизывается последовательность действий https://habrahabr.ru/post/153383/
2. в компиляторе разлагается на комбинаторы, тут прямых линков дать не могу
собственно в данном случае используются комбинатор пары \x.y.f = f x y и Y-комбинатор (комбинатор неподвижной точки)

http://ru.wikibooks.nym.su/wiki/Комбинаторы_—_это_просто!
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296605
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБыло-бы неплохо чтобы господин СтраусТруп подумал в этом направлении.
Если такое реализовать невозможно в рамках language (вовлечение сущностей
уровня kernel API в язык) то хотелось-бы видеть Note #... где такой
вопрос хотя-бы рассматривался.
Ну почему, с определёнными ограничениями можно, я же написал без прямой поддержки ОС (в Win64 только с исключениями глючит, но это просто я плохо знаю Win64 на уровне асма и материалов толковых нет как по Win32). Мне fiber не нравится тем, что он сам память выделяет и swich у него замудрёный - MS, как всегда, простую вещь сделала через одно место.

PS: try-finally-except тоже в каждой ОС по разному реализуется, ничего - сделали же
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296666
Вася Уткин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonkealon(Ruslan)пропущено...

ну тогда для С++ только буст, собственно он под виндой, наверное, и использует fiber-ы
на асемблере писать под все архитектуры и ОС тоже не очень
Было-бы неплохо чтобы господин СтраусТруп подумал в этом направлении.
Если такое реализовать невозможно в рамках language (вовлечение сущностей
уровня kernel API в язык) то хотелось-бы видеть Note #... где такой
вопрос хотя-бы рассматривался.
Да полно:

v1 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3650.pdf
v1+ https://isocpp.org/files/papers/N3722.pdf
v2 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4134.pdf
v4 https://isocpp.org/files/papers/N4402.pdf

Эксперементальная реализация в MSVS 2015 - кстати, с короткими понятными примерами: https://blogs.msdn.microsoft.com/vcblog/2014/11/12/resumable-functions-in-c/
#include <experimental/resumable>
...
Рейтинг: 0 / 0
Тяпничная со-программа
    #39296669
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вася Уткин, спасибо.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Тяпничная со-программа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]