Snusmumriken
Нет, можно функциональщину.
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
Tverd
ну это луче
Tverd
хоть и не сильно пока понятно )
Snusmumriken
Для меня, например, сиподобный синтаксис обязателен, потому что фукциональщина - решение долбанутых головоломок и попытки надуть язык так чтоы он этого не заметил, и неожиданно для себя сделал то что нужно.
Snusmumriken
Но я бы не отказался от расширения семантики луа сокращениями типа тех же стрелочных функций, но нативных.
Snusmumriken
Snusmumriken
Надо ещё аналогичные тернарники намутить, если покатят с локальными переменными.
Ilia
А как же terra lang?
Snusmumriken
Ой, какая смешная штука.
Названием напоминает текстовый редактор "edm" - как EDitor for Mortals, который был в противовес редакторам для нечеловеков (типа vi).
Только "язык для землян" в противовес "языку для лунатиков"
Anonymous
А в lua есть оператор, который из функции делает таблицу с десятью одинаковыми функциями?
Anonymous
Или со строками то же самое. Играюсь в minetest, а во внутриигровых компьютерах нехороший админ поставил ограничение по количеству выполняемых функций
fgntfg
можно сделать таблицу функций
grinchfox
Anonymous
Это как ?
что-то вроде fun * 3 = fun2() { fun(); fun(); fun(); }
Snusmumriken
По количеству одновременно выполняемых функций?
То есть, если функция вызывает другую функцию, так вызывает третью и т.д, то оно блочит? (Блок по стактрейсу), или нельзя много раз вызывать одну и ту же функцию потому что есть блокировка и хук на исполнение?
Anonymous
или 5 * "a" = "aaaaa"
Anonymous
grinchfox
Можно придумать свой стек на корутинах
Snusmumriken
Можно хакнуть этого чувака, поставив хук на хук, обнуляющий его действие.
Anonymous
звучит как хук в боксе %)
Snusmumriken
Ничо, ничо.
Хуки - это весело и мило.
Snusmumriken
Но медленно.
fgntfg
А что в конечном итоге хочешь сделать?
Snusmumriken
А еще можно научиться композировать функции в одну.
fgntfg
Нагрифить?
fgntfg
function fn(s, ...)
local src = [[
local L1, L2, L3, L4, L5, L6, L7, L8, L9 = ...
return function(P1,P2,P3,P4,P5,P6,P7,P8,P9) return ]] .. s .. [[ end
]]
return loadstring(src)(...)
end
fgntfg
можно попробовать так, но у меня самнения.
Snusmumriken
Хех, кстати забавно.
Таким образом можно перегенерировать функцию в те моменты когда она блокируется.
Snusmumriken
Типа обновляем.
grinchfox
Да, храни функции в строках
grinchfox
Кешируй последние n
Anonymous
А что в конечном итоге хочешь сделать?
Есть робот внутри игры. Количество инструкций, которые может выполнить робот, ограничено числом 49. Если он захочет выполнить больше - крашнется. При этом размеры программы не ограничены и всяких if'ов и стейтов можно понаделать сколько захочется. Выполнив свои 48 функций, в следующем тике робот начинает исполнение программы заново. При этом в идеале сохраняются объявленные переменные. По факту же иногда они также очищаются и процесс начинается полностью заново, видимо какой-то баг или еще что. Я хочу сделать так, чтобы можно было написать в империческом последовательном стиле 50 фукций, не заморачиваясь при этом с ограничениями тика. Таким образом, программа должна отследить количество выполняемых операций и при необходимости отложить остаток выполнения на следующий тик. Попробую корутинами действительно
fgntfg
можно
table.insert(arr, [вот сюда анонимная функция])
fgntfg
хмм, computer craft для minecraft както по добрее был
grinchfox
Anonymous
Это minetest, тут опенсурс и сервера работающие по 16 часов в сутки
Snusmumriken
Все что угодно можно сделать злым, если поставить хуки :3
fgntfg
Может поднять minetest сервачёк, железо есть и простаивает
Anonymous
подними
void *
поиграл в minetest, он крутой конечн, но имхо чего-то не хватает ему
void *
не в плане контента
grinchfox
Ему нехватает всего
grinchfox
Выживания там нету нормального как в mc
void *
да были вроде моды какие-то
grinchfox
А все что есть очень сырое для игры
fgntfg
Я играл в совершенно бородатые бетки майнкрафт. Только креативный режим, не бесконечная карта, жуткие тормаза явы.
void *
жуткие тормоза и сейчас есть :D
Snusmumriken
Причем виновата не жава
void *
+
fgntfg
Sergey
Если кто есть из Екатеринбурга, завтра будет мой доклад как накодить игру на Corona SDK и Lua. В яндексе.
Tverd
Может и нет никого, но я бы посмотрел
Yogurt
Никто не знает как в MoonSharp автоконвертить вызываемые имена?
Yogurt
Чтобы вместо kingdom:AddBuilding ("field") писать kingdom:add_building ("field")
Anonymous
Думаю, метатаблицы справятся с этим
Yogurt
в смысле?
Yogurt
Просто методов много, хочется в автоматическом режиме
Anonymous
Ну дык. Для kingdom прописывается метатаблица, которая перехватывает __index или что там используется и заменяет все имена вида add_building на AddBuilding, после чего возвращает соответствующую функцию.
Anonymous
Имя функции будет на лету подменяться при каждом вызове. А функцию для конвертации имён можно написать один раз, чтобы она работал для любого имени функции.
void *
можно рефлексией в шарпе ходить по методам и ставить атрибут, емнип
Yogurt
Yogurt
setmetatable(kingdom, { __index = function(table, key) return table[cool_key(key)] end })
Yogurt
Как-то так выходит, да?
Anonymous
Ага
Yogurt
Сяп
Yogurt
http://www.moonsharp.org/proxy.html
Yogurt
DВо
Yogurt
Только со статиками плохо работает
Snusmumriken
Чот такое.
Только вместо lower можно ещё и вырезать все не буквенные символы.
Snusmumriken
Тогда можно будет писать
kingdom:ADD_BUILDING ("field")
и
kingdom:adD_____BuiLDinG ("field")
Но сами функции должны называться addbuilding.
И это чуть медленнее.
Snusmumriken
А, я мутил логгер таким образом, чтобы можно было каждому уровню логирования влепить свой аппендер. Допустим, чтобы на info/warn он писал в файл, а fatal - и в файл и по интернету мне присылал результат лога. Чот такое.
Но с обработкой ключа в __index - суть ясна, думаю.
Yogurt
Yogurt
Ну вот я как всегда
Yogurt
Snusmumriken
Карочи, кое-где, пара разделов ПО-проекта использовали слегка разные логгеры: в одном, имена методов (warn/debug/) были с большой буквы, в другом - с маленькой. Когда от одного из логгеров избавились, чтобы обеспечить совместимость обеих частей проекта друг с другом, были сделаны алиасы методов вида debug/Debug, а я решил устранить эту фигню на корню, чтобы было пофигу как вызывать. Если есть куча лигаси-кода, на переделку стандартизацию которого уйдёт фуллтайм пара месяцев - это оправдано.
Snusmumriken
P.S. Кто-то любит капс (в логгере это даже оправдано, что-то типа log:WARN видно гораздо лучше чем log:warn).
Кто-то любит кемел-кейс. А кто-то - андерслеши.
А кто-то - табы вместо пробелов и наоборот.
Ну щито поделать.
Yogurt
У проектов есть стайл гайды
Snusmumriken
Иногда )))))
Yogurt
Если у проекта нет стайлгайда и там больше одного кодера, то это или плохой проект или один из прогер нещадно бьет других пока они не удовлетворят его стайл потребности