, основанный на других решениях, вы генерируете накопительное распределение (как целое или плавающее, как вам нравится), тогда вы можете использовать bisect, чтобы сделать его быстрым
, это простой пример (здесь я использовал целые числа)
l=[(20, 'foo'), (60, 'banana'), (10, 'monkey'), (10, 'monkey2')]
def get_cdf(l):
ret=[]
c=0
for i in l: c+=i[0]; ret.append((c, i[1]))
return ret
def get_random_item(cdf):
return cdf[bisect.bisect_left(cdf, (random.randint(0, cdf[-1][0]),))][1]
cdf=get_cdf(l)
for i in range(100): print get_random_item(cdf),
функция get_cdf
преобразует ее из 20, 60, 10, 10 в 20, 20 + 60, 20 + 60 + 10, 20 + 60 + 10 + 10
теперь мы выбираем случайное число до 20 + 60 + 10 + 10 с использованием random.randint
, затем мы используем bisect для быстрого получения фактического значения
Я думаю, что Perligata (Perl на латыни) - это то, что вы ищете. :) Из статьи
Нет причин, по которым программирование Не удалось также использовать языки флексии, а не положение, чтобы обозначают лексические роли.
Вот пример программы (Сито Эратосфена):
#! /usr/local/bin/perl -w
use Lingua::Romana::Perligata;
maximum inquementum tum biguttam egresso scribe.
meo maximo vestibulo perlegamentum da.
da duo tum maximum conscribementa meis listis.
dum listis decapitamentum damentum nexto
fac sic
nextum tum novumversum scribe egresso.
lista sic hoc recidementum nextum cis vannementa da listis.
cis.
Это частично шутливо, но ... язык ассемблера? Такие вещи, как инструкции условного перехода, часто являются вариациями корня («J» для перехода или еще много чего) с добавленными суффиксами для обозначения связанного условия («JNZ» для перехода, если не-ноль, и так далее).
Предположительно любой язык программирования, который явно или близко использует естественный язык в качестве основы, например, Программирование на естественном языке . В Массачусетском технологическом институте было проведено исследование использования английского языка для создания высокоуровневых скелетов программ, что больше относится к области обработки естественного языка; созданный ими инструмент называется Metafor .
Насколько мне известно, ни один из существующих языков не поддерживает, скажем, изменение или расширение ключевых слов с помощью интонации. Но теперь вы меня заинтересовали, так что я уверен, что скоро что-нибудь придумаю!
Из примерно 40 языков, которые я знаю, единственное, что приходит на ум, - это некоторые редкие реализации SQL, которые включают дружественные псевдонимы. Например, чтобы выбрать базу данных по умолчанию после подключения, стандарт - USE <имя некоторой базы данных>
, но я где-то использовал его, который также разрешал USING <имя базы данных>
.
ПРОБЕЛ
и ПРОБЕЛ
. Отличный (осмелюсь сказать, увлекательный) язык игрового дизайна Inform 7 склонен как английский. Но он настолько тесно интегрирован с множеством других дизайнерских решений, что его сложно выделить как отдельную функцию.
Всем, кто интересуется необычным, но успешным языковым дизайном, следует ознакомиться с Inform 7.