[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.1567 Reply
Konachan.com - 25094 3 chibi churuya close eretto nyoron suzumiya_haruhi_no_yuutsu tsuruya utsura_uraraka vector.png
Доброкодер-кун, а доброкодер-кун!
А почему когда в перле выполняется
our %hash;
foreach my $word (@list) {
$hash{$word}++;
}	
создаётся хеш для @листа?
>> No.1568 Reply
>>1567
автооживление и таки undef+1 == 1
;?
>> No.1569 Reply
> автооживление
Где про это можно прочесть?
И как это сделать по-другому?
>> No.1570 Reply
>>1569
неплохо и коротко расписывается в "learning perl" (aka "The Llama book")

map { $h{$_}++ } @list; # FIXME: криво ;<
что собственно требуется сделать?
(perl: there is another way to do it ;)
>> No.1571 Reply
>> No.1575 Reply
>>1570
Нужно (как я понял) при помощи хеша подсчитать число вхождение слов в @list.
Алсо в учебнике написано что из unfef ++ом инициализируется таки в 0.
>> No.1576 Reply
File: s.pl
Pl, 0.00 KB, 0 lines - Click the image to get file
view edit
s.pl
>>1575
> Алсо в учебнике написано что из unfef ++ом инициализируется таки в 0.
емнип undef в арифметике приводится к 0, соответственно
  undef $a; $a++
вернёт 0, при этом в переменной 1;
интерпретатор тоже так считает;
>> No.1815 Reply
File: 1254304746635.jpg
Jpg, 154.58 KB, 700×498 - Click the image to expand
edit Find source with google Find source with iqdb
1254304746635.jpg
Ли/s/пач, почему в перле
1. my $n=0; if ($n=="string"){print"string\n"} работает даже со strict-ом хотя warnings ругается, алсо при замене == на eq всё замечательно
2. my $i=5; $i=++i + ++i выдаёт 14. Я считал, что в перле из двух операций с одинаковым приоритетом первой выполняется левая (и i будет 13).
>> No.1818 Reply
File: 1234327265243.jpg
Jpg, 99.75 KB, 470×336
Your censorship settings forbid this file.
unrated
File: 123768121995.jpg
Jpg, 29.53 KB, 593×599
edit Find source with google Find source with iqdb
123768121995.jpg

>>1815
> $i=++i + ++i
да ты же омич.
>> No.1819 Reply
File: man perlop.4hanabira.txt
Txt, 0.00 KB, 0 lines - Click the image to get file
view edit
man perlop.4hanabira.txt
>>1815
таки приоритет ++ выше умножения(тем более бинарного +;)
>> No.1820 Reply
File: 18 Yekaterinburg'...
Jpg, 44.02 KB, 640×480
edit Find source with google Find source with iqdb
18 Yekaterinburg's Moon 000224.JPG
File: 22 Destiny Spins[...
Jpg, 44.69 KB, 704×528
edit Find source with google Find source with iqdb
22 Destiny Spins[(000446)20-40-59].JPG

>>1819
Я тут мимо проходил, но всё равно же интересно (и всё равно я не понял)
my $i=5; $i=++i + ++i
В каком порядке вычисляется новое значение i? Распиши, пожалуйста, по шагам и как можно подробнее.
>> No.1821 Reply
>>1820
Ну раз ++ имеет приоритет выше чем +, то сначала вычисляется т.е. производится операция ++$i 2 раза, будет $i равно 7, а потом складываются два слагаемых, которых вернул каждый из ++$i 7+7 будет 14. Алсо там везде конечно $i
>> No.1822 Reply
>>1821
Долго пытался понять. Кажется, понял! :3 Спасибо большое!
>> No.1823 Reply
File: s.pl
Pl, 0.00 KB, 0 lines - Click the image to get file
view edit
s.pl
>>1815
> 1. my $n=0; if ($n=="string"){print"string\n"} работает даже со strict-ом хотя warnings ругается, алсо при замене == на eq всё замечательно
собственно == - арифметическое сравнение, $a == $b => a и b приводятся к int: (int)"1blah" == (int)"1" == 1;
естественно "str" == "";
>> No.1824 Reply
File: 12660898084397.jpg
Jpg, 70.85 KB, 463×610 - Click the image to expand
edit Find source with google Find source with iqdb
12660898084397.jpg
>>1823
А eq проводит сравнение строк, и в приведённом примере работает только 123 eq 123. Теперь всё понятно же!
>> No.1856 Reply
File: KYB-001.jpg
Jpg, 127.27 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
KYB-001.jpg
>>1820
i=5;
i=++i + ++i;
В стандарте Си/Си++ результат такого не определен,
что говорит разработчикам компиляторов: "Реализуйте, как хотите." ‒
а программистам: "Не пишите такой код."
Про другие языки не знаю, но и в них думаю следует избегать этого.
ВНЕЗАПНО: http://lurkmore.ru/%2B%2Bi_%2B_%2B%2Bi.
gcc выдает 14, только-что проверил.
В зависимости от языка и компилятора или интерпретатора получаешь непредсказуемый результат от 12 до 14.
Мое видение способа стандартизации:
все преинкременты/предекременты кидаем до выражения,
их пост-аналоги ‒ после.
Т. е.
i=++i + ++i;
превращается в
++i;
++i;
i=i + i;
и "правильный" ответ ‒ 14.
Но тогда все равно остаются проблемы с += -= и неожиданными присваиваниями (i = i++ + (i=7);),
поэтому получается, что undefined behavior ‒ самый разумный выход.
>> No.1862 Reply
File: Cpp.png
Png, 37.83 KB, 782×477 - Click the image to expand
edit Find source with google Find source with iqdb
Cpp.png
>>1856
Я на лурку заливал более интересную картинку.
>> No.1869 Reply
>>1856
На перле
$i=1;$i = $i++ + ($i=7); даёт 8. Как я понимаю, присваивание ($i=7) имеет значение анонимной переменной? равное последнему вычисленному значению, т.е.7. Сначала вычисляется первая часть $i (единица), потом вторая и потом они складываются. А постинкремент не работает, фиг знает почему. Алсо без него вторая часть имеет приоритет, и всегда получается 14
>> No.1870 Reply
File: s.pl
Pl, 0.00 KB, 0 lines - Click the image to get file
view edit
s.pl
>>1869
емнип, пост-операции над переменными выполняются после возврата результата операцией,
а не в конце выражения - аля c;

т.е
$i=0; print $i++ +$i, "\n";
вернёт 1 == 0 + 1;
интереснее с $i + $i++ ;#>
>> No.1872 Reply
Аноны, а есть ли ещё какие-нибудь фрагменты кода, поведение которых может различаться взависимости от компилятора?
>> No.1877 Reply
>>1869
Для gcc получается 15.
>>1872
Да сколько угодно!
i = 5;
i = i++ * sizeof(int) + sizeof(char *)==4 ? i++ : i=0 + --i;
gcc: 254
>> No.1904 Reply
>>1872
#include <stdio.h>
#include <stdlib.h>

main(){
        int i;
        const int ci = 123;

        /* declare a pointer to a const.. */
        const int *cpi;

        /* ordinary pointer to a non-const */
        int *ncpi;

        cpi = &ci;
        ncpi = &i;

        /*
         * this is allowed
         */
        cpi = ncpi;

        /*
         * this needs a cast
         * because it is usually a big mistake,
         * see what it permits below.
         */
        ncpi = (int *)cpi;

        /*
         * now to get undefined behaviour...
         * modify a const through a pointer
         */
        *ncpi = 0;

        exit(EXIT_SUCCESS);
}
http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html
>> No.2052 Reply
File: chi.png
Png, 381.88 KB, 1115×647 - Click the image to expand
edit Find source with google Find source with iqdb
chi.png
А как в Перле нормально работать с многомерными массивами? Я для адресации использую одномерный массив @d, и адресуюсь $d[$i+$j*$isize]. Есть ли более нормальные способы?

И ещё, как оптимизировать работу вложенных циклов for: может быть map-ом будет быстрее?
>> No.2055 Reply
File: s.pl
Pl, 0.00 KB, 0 lines - Click the image to get file
view edit
s.pl
>>2052
> $d[$i+$j*$isize]. Есть ли более нормальные способы?
$d = [ [0,1,2], [3,4,5] ]; print $d->[$i][$j];
конструкция [] творит анонимный массив, возвращает ссылку на него, соотв $d->[$i];
для ленивых в перле - -> достаточно указать хотя-бы один раз;

вобщем - man perllol
>> No.2056 Reply
>>2055
А если размер массива заранее не известен?
>> No.2068 Reply
>>2056

$#$d ;

rtfm perlref %
>> No.2194 Reply
File: 1251484859110.jpg
Jpg, 39.09 KB, 480×480 - Click the image to expand
edit Find source with google Find source with iqdb
1251484859110.jpg
Чх ты ёбаный ты нахуй, казалось бы я уже всякое видел, ан нет:
>>2055
> [] творит анонимный массив
Зачёт, бро.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]