Snusmumriken
Экспериментируй ёпта. Пробуй и с nil и с false в условиях, строить и разбирать сложные штуки. Но начни с простых.
Alexander
так and же коммутативен
Snusmumriken
чета сложна
Хех, Саш, тут уже ответили : ) Чуть меньше умных слов, если можно. Объясняй лучше простыми, на всякий случай.
Alexander
от перемены andуемых местами - сумма тысячи истин не меняется!
B
но ведь результат зависит от участников не?
Alexander
*me достал Меч тысячи истин
Alexander
но ведь результат зависит от участников не?
от участников - да. хотя бы одно слабое звено - и все, прощай истина.
Alexander
а от перестановки их местами не меняется ничего, какая разница, где слабое звено, если цепь порвалась? )))
Snusmumriken
Малацом :3
Snusmumriken
Последний вариант в цепочке истин - истина к которой мы приходим. Ой, последний элемент этой цепи не может быть false. Хм.
B
вродь и не страшно но пока сложно чет принять факт такой свободной перестановки
Alexander
if ( 0 != some_dangerous_variable) ....
B
https://www.youtube.com/watch?v=NOW4QiOD-oc
Snusmumriken
a = b and c and d and true and 100500 or c and d and 100499 Цепи истины!
Snusmumriken
Если хоть один элемент цепи не истинен - это не цепь истины! Переходим к следующей, авось она будет цепью истины.
B
а, тоисть прощи говоря вне зависимости от количества все считается как одно целое, а если воткнуть где то or то он идет как разделитель?
Snusmumriken
Угу. А переменной присваивается последний элемент цепи. Если все цепи ложны - возвращается nil.
Snusmumriken
Если элементы цепи - функции, которые возвращают true/false, то стоит первыми выставлять быстрые функции, чтобы не совершалось лишних действий. Да, я даже так делаю: j = data and json.decode(data) if not j then return false end, как-то так. Увы, ключевые слова в тернарники не пихнёшь, в отличии от if-then-else.
B
тогда... ну не знаю вопрос : а что такое цепь и\или чем она является? в том ключе что не идет nil, а выходит значение, именно что последнее
B
что то такое должно дать nil при условии то все ложное? ( b and c and d and e ) or ( b1 and c1 and d1 and e1 )
B
все простите, последнее и на этом остановлюсь : так?
B
я тут немного говнокода привез о чем то примерно таком говорил, но может и case отдельно сделать function switch( values, caseValues, results ) for i = 1, #values do for j = 1, #caseValues do if(values[i] == caseValues[j]) then results[j] else -- default masage end end end end потому как с результатами кеисов каша пока
Snusmumriken
Хмм.
Snusmumriken
Это выдуманная терминология, для простоты понимания. Если ты кому-то скажешь "цепочка истин" - он тебя не поймёт.
Snusmumriken
Если хоть одно звено в текущей цепи окажется ложным - мы смотрим следующую цепь.
Snusmumriken
Ну, твоя интерпретация тоже работает, только в ней мы выбираем первое истинное звено из цепи. Если всё выражение принять за цепь, а выражения с and'ами - за звенья. Звено в таком случае истинно если все его компоненты истинны. Но это уже не цепи истины, а цепи поиска истинного звена. Чувствую себя властелином колец, с "одним истинным кольцом".
Snusmumriken
Во, во! Воскресное развлекалово! Я вам пиписькомерку принёс! http://nazva.net/logic_test1/ Можно проходить забавный тест и хвастаться результатами!
B
19
Snusmumriken
Хех, а теперь то же самое, но задумываясь над ответами :3 У меня стабильно 29, не знаю где косячу, но это один и тот же вопрос. Возможно, в котором "не надо трогать уззку"
B
21
B
сложна карочи
Snusmumriken
Нормуль. У тебя скорее всего проблемы с двойными отрицаниями и запутанными условиями. Тренируйся.
B
если не чесать угубка за ухом, то молоко поблизости не скиснет; если почесать угубка за ухом, молоко поблизости скиснет; что то такое ломает меня
Snusmumriken
Если почесать - зашипит. Если зашипит - молоко скиснет. Вывод - если почесать - скиснет. Фактически, упрощение цепочки.
B
а если не чесать - не скиснет
Snusmumriken
Не факт. Ты же не знаешь других условий скисания молока. Например, время.
Snusmumriken
Малацом, отличный тест :3
Snusmumriken
Карочи, все условия в которых может быть одно, а может быть другое - ложны по умолчанию, потому что есть шанс ложного вывода. Проверяйте факты :3
Snusmumriken
В классической науке, за счёт слишком большого количества факторов которые не всегда возможно учесть, за истину принимается факт который срабатывает в 95% случаев. Если меньше (даже 94%) - оно уже ложно. А если невозможно даже посчитать шанс - точно ложно. Собственно, по этой причине, исключения не подтверждают правило, а медленно ломают его.
B
22, пойду поем ну его
B
черт его знает, и как натаскать себя на понимание и решение запутаных условий?
Snusmumriken
Экспериментировать. Пиши код бля. Попробуй все возможные if-then-else заменить на тернарники.
B
switch( values, caseValues, results ) for i = 1, #values do for j = 1, #caseValues do if(values[i] == caseValues[j]) then print( results[j] ) break else print( "not-case case" ) end end end end все то же но только много информации из элс блока
B
решимо if j == 6 then print( "not-case case" ) end ну или типа j == #caseValues
Alexander
В классической науке, за счёт слишком большого количества факторов которые не всегда возможно учесть, за истину принимается факт который срабатывает в 95% случаев. Если меньше (даже 94%) - оно уже ложно. А если невозможно даже посчитать шанс - точно ложно. Собственно, по этой причине, исключения не подтверждают правило, а медленно ломают его.
на самом деле, исходная фраза имела значение "наличие исключения подтверждает, что некое правило существует". то есть, если где-то в договоре прописано исключение, то оно не могло бы там появиться, не будь некоего неупомянутого правила.
Snusmumriken
Наличие исключений не подтверждает наличие правил, ибо правила строятся людьми. Ну, иначе я могу ввести правило: "Все люди - пидоры", и наличие не пидоров будет подтверждать наличие данного правила. Это ложное выражение. Хотя утверждение "Есть исключения среди множества людей, которые не являются пидорами" будет указывать на существование ложного правила. Хмм.
Roman
обалдеть, тридцаточка, спасибо за ЧСВ
Snusmumriken
обалдеть, тридцаточка, спасибо за ЧСВ
Есть высказывание одного школьного учителя физики: "Мозг - он как анус. Если концепция не влезает - надо разрабатывать". Это восхитительно. А мозг разрабатывается, поэтому не унывай, лучше работай над собой :3
Snusmumriken
Но само правило может быть ложным.
Alexander
именно так
Alexander
Snusmumriken
Хорошо что тут разные люди, есть чему учиться и чему учить.
Alexander
(впрочем, этот тест я уже проходил лет пять назад)
Alexander
где-то на 29 примерно
Snusmumriken
Во-во, ребят, вы малацы что уделили время. Думаю, что даже тем у кого не те результаты которые они хотели - есть куда работать, и это отлично!
B
просто что б знать куда работать нужно глядеть на свои ошибки, тест наглядный тому пример мы получаем ответ но не конкретные результаты по каждому вопросу, для меня все ответы были заведомо истинными поскольку я в них не сомневался но система просто сказала что это не так —---------------------— хотя у меня в целом всегда были проблемы с логикой это как задача про двух стражников двери и один вопрос ты изначально не знаешь кто из них врет а кто нет потому и их ответы для тебя не решение, зато все время все эту задачу решают без проблем а у меня она вызывает непонимание
B
это вообще можна считать адекватным, или есть какие то более удобные\быстрые и тд тп способы? for k,v in pairs( tab ) do local tt = 'test' if v == 'ins' then table.remove( tab, k ) table.insert( tab, k, tt) end end
Roman
local tt = 'test' for k,v in pairs( tab ) do if v == 'ins' then tab[k] = tt end end заменить все ins на test?
B
ну не, там в целом просто типа замена элементов при необходимости пробовал как то сделать
Roman
ну не, но типа да
B
это пример, я в целом, нормален ли такой способ замены элементов таблицы?
Roman
я набросал получше, то же самое должен делать
Roman
table.remove и table.insert далеко не всегда нужны, таблицам удобно так с помощью равно значения присваивать
B
оки, учтем
Roman
и вообще одного не понимаю, зачем нужен этот table.insert, если я такой tab[#tab + 1] = x и все прекрасно?
Можно вставлять в середину.
B
да, и остальное сдвигается
B
я типа где то видел что к примеру вродь по pairs работает где то в два раза медленнее чем по #table
B
хм и правда вродь, приверил насколько было по силам, вродь так и есть
Roman
может потому что для массивов есть ipairs?
Roman
ну для числовых ключей, а pairs для всяких
B
а чет как то так вышло # 1 pairs 2 ipairs 1 -- считай что пустой # 5 pairs 4 ipairs 5 -- прогон с выводом или даже так # 0 | pairs 1 | ipairs 1 -- пусто # 4 | pairs 5 | ipairs 4 -- вывод
B
-- интересно а таким кто то занимается? local tab = { { { { { { {42}}}}}}} print(tab[1][1][1][1][1][1][1])
Snusmumriken
С pairs/ipairs есть один косяк, который сначала незаметен, если работать с таблицами коллекций. Если использовать массивы объектов, то всё очень здорово: rects = { {x = 10, y = 20, w = 30, h = 40}, {x = 100, y = 200, w = 300, h = 400}, {x = 20, y = 40, w = 60. h = 480}, } Допустим, чтобы сдвинуть все прямоугольники на 10 пикселей вправо, мы можем сделать так: for i, v in ipairs(rects) do v.x = v.x + 10 end Но если попробовать сделать так: array = {10, 20, 30, 40} for i, v in ipairs(array) do v = v + 10 end То массив array не изменится вообще. То есть, он всё ещё будет равен {10, 20, 30, 40}. Обоснование в том, что pairs/ipairs работают примерно так: for ipairs(array) do local i, v = n, array[n] v = v + 10 end Но таблицы и функции передаются по ссылкам, а всё остальное - по значениям. То есть, при работе с массивами стоит использовать обычные циклы: for i = 1, #array do array[i] = array[i] + 10 end С удалением значений хешей всё примерно так же: rects = { rect1 = {x = 10, y = 20, w = 30, h = 40}, rect2 = {x = 100, y = 200, w = 300, h = 400}, rect3 = {x = 20, y = 40, w = 60. h = 480}, } for k, v in pairs(rects) do v = nil -- не прокатит, потому что у нас тут как бы локальная переменная rects[k] = nil -- прокатит, потому что мы в конкретной таблице удаляем значения end Кстати, это относится не только к луа, но и, например, к питону и жаваскрипту.
B
А есть описание В офф документации стандартных библиотек Или чего то такого? Временами интересно посмотреть на реализацию тех же math