С Новым годом! Форум программистов, компьютерный форум, киберфорум
Perl
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
Заблокирован

[RAKU] Map как функция и map как метод - в чём разница?

04.01.2023, 23:09. Показов 1562. Ответов 13

Студворк — интернет-сервис помощи студентам
Не вкурю почему разный результат выходит.

Perl
1
2
3
4
5
6
my $var = (0..10);
 
map(-> $x {$x * 10}, $var).WHAT
> (Seq)
$var.map(-> $x {$x * 10}).WHAT
> (Seq)
И то и то возвращает Seq.
Но при этом:

Perl
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
$var.map(-> $x {$x * 10})>>.say
 
> 0
10
20
30
40
50
60
70
80
90
100
 
map(-> $x {$x * 10}, $var)>>.say
 
0
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
... и так далее до 100
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.01.2023, 23:09
Ответы с готовыми решениями:

Как вставить элемент и вывести элементы на экран в map<string, map<string,int>> ?
У меня есть map&lt;string, map&lt;string,int&gt;&gt;, в него надо добавить элементы (типа Ivanov potato 200) Использовать именно map&lt;string,...

Как вставить map в map
есть такой map map &lt; INT64 , map &lt;INT64 , map&lt; wArray , int &gt; &gt; &gt; tMenu; как его заполнить? пробовал так ...

Emplace в std::map. Как добавить элемент в std::map без копирования?
здравствуйте... есть ли способ не писать так: std::map&lt;int, char&gt; ksa; ksa.emplace(std::piecewise_construct, ...

13
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 04:09
Лучший ответ Сообщение было отмечено Гай как решение

Решение

Catstail,
просьба подправить название топика префиксом [RAKU]
--------

тут дело не в разных формах map, а в об'явлении $var;
в таком виде ( скалярном ) $var = 1..100
переменная $var - это Range, а не List, поэтому самостоятельно расплющиваться в 1,2,3,4,5,6,7,8,9,10 не будет;

нужна явная итерация
вот так:

Perl
1
2
3
my $var = (0..10).List;
 
say map(-> $x {$x * 10}, $var);

или так:

Perl
1
2
3
my $var = (0...10); # при таком об'явлении $var это Seq
 
say map(-> $x {$x * 10}, $var);
но правильнее ( очевидней ) так:

Perl
1
2
3
my @var = 0..10;
 
say map(-> $x {$x * 10}, @var);


Согласен, что данный эффект довольно неожиданен.
1
Заблокирован
05.01.2023, 10:17  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
просьба подправить название топика префиксом [RAKU]
да я поставил метку, что это вопрос по perl6

Цитата Сообщение от volodin661 Посмотреть сообщение
переменная $var - это Range, а не List,
Я знаю, но map то в обоих случаях возвращает последовательность и применяем мы say к последовательностям. Вот в чём был интерес.

То есть в таком виде при применении функции map происходит изменение внутри Range, где оно просто увеличивается до 100?

Цитата Сообщение от volodin661 Посмотреть сообщение
my @var = 0..10;
Я, кстати, так и думал. Но на поверхности нигде не сказано, что Range нужно объявлять как массив, а копать я не стал - решил сразу тут спросить )))
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 15:09
Цитата Сообщение от Гай Посмотреть сообщение
То есть в таком виде при применении функции map происходит изменение внутри Range, где оно просто увеличивается до 100?
получается, что так.

Добавлено через 6 минут
Налицо некоторое нарушение принципа DWIM ( do what i mean ),
но никто же вас за руку не тянул, a вы употребили сиджил $ вместо @.
0
Заблокирован
05.01.2023, 15:17  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
о никто же вас за руку не тянул, a вы употребили сиджил $ вместо @.
просто в манах как бы так и показано
Perl
1
my $r1 = (1..5);
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 15:43
Гай,

да, есть такой об'ект Range,
он ленивый, живёт своей жизнью и над ним самим можно производить некоторые операции.

Bash
1
raku -e 'my $r = 2..5;  $r += 1; $r.say'
0
Заблокирован
05.01.2023, 15:51  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
об'ект
с телефона пишите?
Цитата Сообщение от volodin661 Посмотреть сообщение
да, есть такой об'ект Range,
надо будет ман про него почитать чтобы разобраться получше как и что
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 16:23
Цитата Сообщение от Гай Посмотреть сообщение
с телефона пишите?
не, русской клавиатуры нет, раскладка Латиница, на твердый знак места не хватило
0
Заблокирован
05.01.2023, 16:28  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
не, русской клавиатуры нет, раскладка Латиница, на твердый знак места не хватило
Ясно. Просто на телефонах часто беда с этим знаком вот и подумал.
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 16:57
вот так характернее:

Bash
1
raku -e '^5.WHAT.say; map({$_*2}, ^5)».say'
Bash
1
raku -e 'my $r = ^5; $r.WHAT.say;  map({$_*2},  $r)».say'
0
Заблокирован
05.01.2023, 17:12  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
map({$_*2}, ^5)».say
Я так же недавно пробовал, только без только вместо пятёрки у меня стояло имя переменной. Тоже набрёл на это решение.
Думал если он ленивое. то возможно, вручную нужно указать необходимость вызывать каждое значение. Хотя map и так должно это делать вроде...
Добавлено через 5 минут
Bash
1
perl6 -e 'my $var = (0..5); map({$_ * 2}, $var)>>.say'
Но не взлетело так же, как и у вас во втором примере, так как записано с сигилом $
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 17:28
Я не про решение в данном случае,

а про поведение об'ектов и про принцип DWIM.

^5 - это об'ект Range
$r = ^5; $r - это тоже об'ект Range

но ^5 - это временный об'ект, он исчезнет после выполнения операции,
а $r - постоянный об'ект и поэтому поведение у них разное внутри одной и той же функции map;

поэтому ^5 просто проитерируется, а у $r вместо этого раздвинутся границы.
0
Заблокирован
05.01.2023, 17:29  [ТС]
Цитата Сообщение от volodin661 Посмотреть сообщение
Я не про решение в данном случае,
я понял, просто описал вам как я мыслил. а то что вы мне донести хотели я понял.
0
 Аватар для volodin661
6671 / 2264 / 346
Регистрация: 10.12.2013
Сообщений: 7,827
05.01.2023, 17:43
ну и отлично.

просто хотел отметить, что чтение man, описывающее данное поведение обьектов,
это вот:
https://docs.raku.org/language/contexts

Добавлено через 4 минуты
Компилятор сначала вычисляет контекст,
в который погружён обьект, затем по результатам данного вычисления он принимает решение,
какой именно метод у обьекта ему следует вызвать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.01.2023, 17:43
Помогаю со студенческими работами здесь

Обращение к элементам vector, который находится в map, находящийся в map
Всем добрый день! Имеется такой контейнер. Как обращаться к элементам вектора и как пушбэчить его? map...

Поместить вектора в map и реализовать перегрузку вывода для map
Всем привет! Нужна помощь в написании программы. У меня есть вот такая прога и мне нужно каким-то образом поместить вектора в map и...

Создание и использование карт изображений на сайте тег <map> </map>
Собственно, вопрос заключается - в том, что бы получить значения coords для многоугольника. Как и чем, это лучше и быстрее сделать.?

Добавить функцию с аргументом в map[int]map[os.Signal][]func()
Есть такая мапа SignalHooks Мапа отсюда https://github.com/fvbock/endless/blob/master/endless.go#L104 const ( PRE_SIGNAL = 0 ...

Написать собственную функцию mymap(function, list), которая будет работать так же как функция map()
У начальника отдела информатизации завелся жук - &quot;bug&quot;, который сломал реальную функцию map, искать жука нет времени, поэтому начальник,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru