- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
def lkm(seed, a, c, m, l, pre=lambda e:e, post=lambda e:e):
v = [pre(seed)]
for i in range(l - 1):
v += [pre((a*v[i]+c)%m)]
for i in range(l):
v[i] = post(v[i])
return v
print (lkm(42, 42, 4242, 424242, 100, post=lambda e:e>>4))
inkanus-gray 28.10.2015 23:27 # −1
gost 28.10.2015 23:37 # +2
3_14dar 28.10.2015 23:57 # 0
gost 29.10.2015 00:03 # +1
3_14dar 29.10.2015 00:36 # 0
Побывать на питоне - это открыть его для себя? Побывал, и очень давно. Что теперь надо делать?
gost 29.10.2015 00:51 # +1
3_14dar 29.10.2015 04:42 # 0
gost 29.10.2015 07:38 # 0
3_14dar 29.10.2015 08:48 # 0
gost 29.10.2015 09:07 # 0
3_14dar 29.10.2015 10:23 # 0
roman-kashitsyn 29.10.2015 11:16 # 0
Abbath 29.10.2015 11:37 # 0
roman-kashitsyn 29.10.2015 11:50 # 0
Решил смоделировать на жабе довольно простую, как мне казалось, вещь - числа. Целые, Рациональные, Комплексные, и т.п. При этом хотелось, чтобы операции над рациональными могли возвращать Целые, если знаменатель стал единичным, а комплексные могли превращаться в рациональные или целые. Т.е. чтобы результатом каждой операции было максимально простой тип числа.
В общем, "ООП" подход тут не привёл ни к чему хорошему. Получилась какая-то нерасширяемая жесть и свитчи по типам.
Понятно, что на каком-нибудь Haskell тоже ничего хорошего тут не выйдет - тип возвращаемого значения зависит от рантайм-аргументов. Тут нужна динамическая питузация.
Зато сейчас мне понятно, что тут надо "альтернативное" ООП - подобные отношения легко моделируются и расширяются в CLOS.
imihajlov 29.10.2015 12:11 # 0
roman-kashitsyn 29.10.2015 12:16 # 0
Но визитор - тоже нерасширяемое говно. При добавлении нового типа числа нужно идти и править исходники, в которых определены предыдущие типы чисел.
В CLOS есть мультиметоды, что даёт возможность добавлять реализации, практически не изменяя уже написанного кода.
kegdan 29.10.2015 14:13 # +1
Так основные паттерны - свитч и костыль
3.14159265 29.10.2015 15:50 # +1
wvxvw был прав. Всегда.
TarasB 29.10.2015 15:51 # +2
1 + i*0.10842021724855044e-00018
ну короче ты понял, да? В дискретных случаях, типа рациональное-целое, это может работать, а когда всё плавает, то хуюшки.
roman-kashitsyn 29.10.2015 16:24 # +3
Опять же, многое зависит от реализации функции exp. Можно специализировать в ней логику работы с комплексными числами. Чтобы разруливать штуки вроде exp(ln 5), конечно, уже нужны символьные вычисления.
kegdan 29.10.2015 19:29 # +2
CHayT 29.10.2015 18:34 # 0