Much O.F. LAGER Предисловие автора Естественно, первый вопрос к названию этой книги: зачем нужен специ- альный язык программирования для женщин? До этой книги все языки програ- ммирования писались мужчинами и для мужчин. А суть в том, что любой язык программирования - прежде всего язык логики, а женская логика существен- но отличается от мужской. Редактор (кстати, мой друг по светлому пиву) правильно заметил, что основное преимущество программ на Male C в том, что они пишутся не для решения задач, ответ которых известен; программы на этом языке пишутся для нахождения нетривиальных решений. Почему тогда "Male C", а не "Female C"? Дело в том, что этот язык ну- жен скорее для мужчин, чтобы понять логику женщин, а не наоборот - жен- щины прекрасно понимают мужчин (но это не значит, что они разделяют их взгляды). Поясним на примерах. (в дальнейшем служебные слова языка будем писать целиком в верхнем регистре). 1. Что означает? GOTO begin; Мужчина скажет, что он собирался перейти на заданную метку и поэтому поставил этот БЕЗУСЛОВНЫЙ переход. Однако спросите женщину и она вам от- ветит, что если она куда-то собралась, то это не значит, что именно туда она и пойдет. Если она собиралась в прачечную, затем в продуктовый мага- зин, то не исключено, что сначала она зайдет в модный магазин, купит там что-нибудь, а затем зайдет к приятельнице обсудить покупку. И это будет ее конечная остановка. 2. Что означает? WHILE (hour == 23.00) WORK(); Мужчина скажет, что он - добытчик и это заставляет его работать до- поздна. Женщина же сделает вывод, что мужчина любит работу больше, чем ее. 3. Что означает? IF (I'd like to eat) I eat; ELSE I don't eat; С точки зрения мужчины все логично: если он хочет есть, он ест, если нет, то - нет. Однако для женщины все это слишком прямолинейно. Что она животное, что ли? У женщины может быть сто причин для того, чтобы по- есть: хочется перекусить, плохое настроение, скрыть смущение, досадить приятелю, съев его деликатес, да мало ли что! А уж насколько иррацио- нально (с точки зрения мужчины) женщины объясняют, почему они едят ЭТО и не едят ТО. Советуем мужчинам прочитать с десяток разных диет и найти логику в то, к примеру, почему в одной диете советуют есть мясо, в дру- гой категорически это запрещено - ведь цель все они преследуют одну и ту же - похудание. 4. Что означает It is TRUE; Everything; I DO; I DO; it; FOR (you) ... Мужчина найдет здесь массу синтаксических ошибок (с точки зрения язы- ка C). И только женщина может понять, что это просто любовная песенка Билли Джоэла... Кое-кто может сказать, что женская логика - не логика вообще. Однако критерий теории - практика, и каждый может убедиться, что такие нелогич- ные существа, как женщины, вполне успешно существуют в этом мире. Так что начнем. S. Cool 1. Константы В Male C нет такого понятия, как константа. Ничто в мире не вечно, даже любовь. Однако есть несколько понятий, о которых точно известно, что они существуют и которые в Male C, таким образом, постоянны. Однако повторяем, что точное значение их неизвестно. Таких констант несколько: LOVE /* наиболее важная константа, чаще всего цель программы. Имеет два значения: YES NO */ Эта единственная константа, понять которую можно только из контекста, поскольку необходимо еще знать, какая LOVE имеется ввиду. Примечание: Некоторые считают, что существует множество промежуточных значений этой константы. Комментарий: осетрина бывает свежей или... SEX /* менее важная константа, чаще всего путь к первой константе */ Примечание: Кое-кто думает наоборот. Без комментариев. HEALTH /* самая непостоянная константа. Обычно принимает три значения: BAD - иногда GOOD - иногда SO-SO - чаще всего. */ MONEY /* критический параметр, всегда не хватает */ Примечание: Некоторые полагают, что с помощью этой константы можно получить все остальные. Без комментариев. WORK /* средство для наполнения предыдущей константы */ Примечания: Некоторые полагают, что WORK существует ТОЛЬКО для самовыражения. Комментарий: в доме без туалета жить можно. Но неудобно. Примечание: в Male C+ WORK придается статус оператора, а не константы. Это новые веяния - работа уже не считается необходимой для успеха. STATE /* вообще-то, это константа из языка Male C+, однако в послед- нее время она введена в большинство трансляторов языка С. Хотя мы счита- ем, что Male C+ более мужско-шовинисткий диалект, но... */ Принимает два состояния: RULEZ - Все ОК, все отлично, великолепно и пр. SUX - Все наоборот. Примечание: В Male C вводится еще несколько констант, к сожалению, мужско-шовинистских. Не вдаваясь в подробности, мы опишем несколько для полноты картины: BEER /* обычно принимает дробные значения, 0.3, 0.5, реже 1, 2 */ CAR /* обычно равно 1; зачастую заменяет все остальные константы */ SPORT /* если не WORK, не SEX и не BEER, но SPORT, однако чаще всего в пассивной форме наблюдения */ Забегая немного вперед, предлагаем для самостоятельного разбора прос- тенькую программу с использованием вышеописанных констант (заметьте, что смысл программы надо искать исходя не только из одних операторов). RULEZ; IF (LOVE == SEX) BAD; ELSE IF (LOVE == WORK) SO-SO; ELSE (LOVE == YES) GOOD; LOVE == NO; VERY BAD; END; Короче, если вы чувствуете любовь, но не можете дать ей определение, это хорошо. 2. Переменные 2.1. Одиночные переменные Переменные в языке Male C имеют примерно то же самое значение, что и в других языках. Однако, как в старых языках, в Male C нет необходимости явно определять тип переменных, когда их смысл ясен из контекста. К примеру, если парикмахер плохо уложил вам волосы, это безусловно, Shit. А если он к тому же еще и сжег их, то это DOUBLE Shit. Для женщины Whisky редко бывает DOUBLE, а мужчина вполне может осилить такую порцию. Wood, конечно, имеет тип FLOAT. А Axe - навряд ли. А для Submarine этот вопрос находится в стадии обсуждения. GLASS обычно INT, но если применить к нему оператор BREAK, то навряд ли оно (он) останется целой(лым). Skirt лучше всего SHORT (впрочем, вечером можно и LONG). А вот стро- ковая константа (разговор двух женщин) почти всегда LONG а не SHORT. Если женщина замужем, но на курорте она одна, то Husband для нее по- нятие VIRTUAL, однако дома, он, конечно, REAL. Многие женщины хотели бы иметь CHAR (приходящую уборщицу), но чаще всего это остается UNSIGNED мечтой и пахать на кухне и на уборке прихо- дится самой. Charge может быть STATIC, а вот CURRENT (электрический) - по опреде- лению нет. Особый тип переменной - LOGICAL. Хотя она принимает всего два значе- ния TRUE и FALSE, это не значит, что на основании ее значения можно при- нимать какие-либо действия. Если MONEY is EMPTY, это еще не значит, что купить новую шляпку невозможно (особенно не советуем высказываться об умственных способностях своей жены, которая все же сделала это). Примечание: в Male C+ и некоторых диалектах C для решения этой проб- лемы вводятся дополнительные значения этой переменной, типа ALMOST.TRUE или BETWEEN.TRUE.FALSE. Мы считаем, что в этом нет необходимости, т.к. не решается главная проблема: выбор. Если ваш муж возвращается очень поздно, в подпитии, странно пахнет духами и при этом говорит, что задер- жался на работе, это может хоть ALMOST.TRUE, хоть ALMOST.FALSE, все рав- но ничего, кроме скалки, не поможет. Через три месяца после вашей же- нитьбы жена может принести вам чернокожего младенца. Если при этом она убеждает вас, что ни с кем, кроме вас, последний год в близких отношени- ях не была, ваша LOVE к ней может заставить считать это и за BETWEEN. TRUE.FALSE и даже за TRUE. Однако вы, вероятней всего, будете едиствен- ным в этом убеждении. 2.2. Наборы переменных Наборы переменных - группа переменных, связаных общими свойствами. К примеру, массив Furniture [] содержит набор мебели, а составная перемен- ная Age_of_Women - возраст женщины. INT LOVE [ SEX, Flirt, LOVE] очевид- но обозначает набор состояний любви. 3. Операции присваивания. Операции присваивания вообще одни из самых популярных у нас операций. Этим занимаются все, начиная с ваших детей и кончая государством. Операции присваивания для переменных в общем такие же, как и в обычном C, кроме некоторых неважных случаев для упрощения понимания программ. Примеры: MONEY = $100 то же самое, что MONEY is $100 IF ( FOUND ) то же самое, что FOUND STATE is RULEZ то же самое, что RULEZ 4. Цикл DO. По замыслу создателей языка, должен быть самым употребительным опера- тором. Действительно, разве всех нас не учили в детстве, что единствен- ный путь к известности и достатку - труд? Однако многие из нас выросли и нашли разные пути к достатку и без утомительных циклов DO. К примеру, молодая девушка пишет в газеты бесплатных объявлений: "18 лет, обая- тельная-привлекательная 90-60-90, без специальных навыков, расмотрю пре- дложения от $500". Кстати, разберем это объявление на Male C и попробуем сделать выводы. MONEY is EMPTY; SEEK ( WORK ); IF ( MONEY < $500) BREAK; /* Облом */ DO { SEX; WHILE (HEALTH is SO-SO); } Is STATE GOOD ? Молодая-привлекательная без особых навыков, но с запросами от $500 может получить только определенную работу, причем весьма интенсивно. При этом, правда, ответ на последний оператор программы остается открытым. Кое-кому нравиться быть "секретуткой". 5. Особые операторы. Смысл особых операторов можно понять из их перевода. Нет смысла пере- числять их все, т.к. список существенно зависит от реализации языка. Од- нако мы разъясним смысл некоторых, используемых в этом руководстве. SEEK () - поиск. В скобках указывается переменная, по которой ведется поиск. SEEK ( Husband ) и SEEK ( Lover ) далеко не одно и то же, хотя, конечно, каждая женщина надеется, что ее муж всегда будет хорошим любов- ником, а ее любовник наконец разведется с женой и жениться на ней. FOUND () - найдено! Что найдено, смотрите в скобках. Следующий пример иллюстрирует хорошо известный факт, что искать черную кошку в темной ко- мнате - безнадежное занятие. DOUBLE Room = Cat = Black; SEEK ( Cat ); FOUND ( EMPTY ); 6. Оператор RETURN. Все возвращается на круги своя. Таким образом, RETURN непосредствен- но связан с операторами циклов. Пример: INT Age; IF ( Age > 50 ) IF ( WORK is GOOD \!\! Alcohol is EMPTY ) HEALTH is GOOD; ELSE HEALTH is BAD; Age != RETURN; DIE; END; Конечно, после 50 здоровье уже не то, особенно если вы злоупотребля- ли. С другой стороны, "Кто не курит и не пьет, тот здоровенький помрет" - годы не возвратишь. 7. Оператор CONTINUE Большей частью опять же используется в циклах. Рассмотрим пример: INT Age; INT Man; INT Tired is NO; IF ( Age_of_Women > 30 ) DO { SEX; IF ( Man is Tired ) { SUX; LOVE is NO; BREAK; } CONTINUE; } Если женщине за тридцать и ее мужу где столько же или больше, то для него начинаются трудные времена. Если он будет постоянно ссылаться на усталость, то женщину ждет облом, неудовлетворенность в любви и вообще SUX. А если не будет, но вы полагаете, что будет RULEZ? А вот и нет. Есть только продолжение, продолжение и продолжение. 8. Оператор SWITCH Переключаться в жизни необходимо постоянно. И вынуждено, и просто по- тому, отдых необходим. Следующий пример иллюстрирует тот простой факт, что отдых - смена деятельности. DOUBLE Relax; DO {WORK; WHILE ( HEALTH is SO-SO )} SWITCH ( MONEY ) { CASE ($1000): KANARY; CASE ($500): Relax_House; CASE ($10): BEER; } HEALTH is GOOD; Вопрос, как подействуют Канары, Дом Отдыха или пиво на здоровье конк- ретного индивида, остается открытым. Мы надеемяся, что оно улучшиться (даже от пива). 9. Оператор BREAK BREAK - оператор аварийного выхода, чаще всего в негативном смысле (облом). Разберем пример: CHAR WORK is Empty; SEEK ( WORK ); FOUND; SWITCH ( MONEY ) { CASE ($10/Month): BREAK; CASE ($100/Month): BREAK; CASE ($1000/Month): RULEZ; } Результат поисков работы может быть разным. Если зарплата меньше $1000 в месяц - SUX и BREAK (т. е. облом). Еще пример: INT Glass; IF ( SUX ) { DO Glass BREAK; } RULEZ; Рецепт улучшения настроения - битье посуды совершенно непонятен муж- чинам. Однако, представьте, что на месте Glass (бокала) могли бы ока- заться вы... 10. Оператор GOTO GOTO - оператор языка, которым пользователи Male C обмениваются с друг другом. Очень удобно: ваш шеф просит вас принести квартальный от- чет, а вы посылаете его в $%# до переполнения его стека терпения. Другой случай: даже если вы очень торопитесь, советуем все же воспользоваться переходом, а не бежеать сломя голову прямо через дорогу. В новых веяниях (Male C++) считается, что этот оператор лишний. Одна- ко разберем пример: #DEFINE HOUSE KEEPING #INCLUDE WASHING MACHINE MAIN () { FLOAT Thing is Dirty; WHILE (Thing) { Wash; BAD; GOTO HELL; } HELL: Shop \!\! Barbeshop \!\! Love-story_reading; } Понятно, что домашняя работа (в частности, стирка) бесконечна, и чис- ло грязных вещей (Thing) никогда не кончится. Поэтому необходимо ис- пользовать оператор безусловного перехода, которое в данном случае посы- лает эту работу в HELL. Когда его использовать, зависит от вашего наст- роения, однако если вы не хотите BAD с вашим мужчиной, старайтесь им не злоупотреблять. Примечание: некоторые скажут, что в написанном примере можно было во- спользоваться оператором BREAK. И что? Вы остановили работу, а не посла- ли ее к черту и вам придется рано или поздно ее продолжить, причем наве- рняка переменная THING существенно увеличится. Некоторые могут заметить странное определение метки "черта". Так ведь к черту посылается стирка, а вместо нее предлагается или поход по мага- зинам, или парикмахерская, или просто чтение любовных романов. Еще один пример иллюстрирует тот факт, что женщина любит ушами: CHAR Ask "Do you love me?"; Neverending: IF ( Ask is 'Yes') GOTO Neverending; 11. Условные операторы Не случайно этот раздел мы отнесли ближе к концу. Смысл этого опера- тора слишком очевиден: жизнь полна компромиссов и выполнение ваших жела- ний постоянно наталкивается на массу условий. Надеемся, что наш язык по- может вам в решении ваших проблем. В следующем пункте мы предоставим вам несколько программ для самостоятельного изучения. 12. Примеры 1. Кандидат на брак. #UNDEFINE MAN #INCLUDE ALL MAIN (Target is LOVE); LONG CHAR Why = "Зачем вы девушки, NICE LOVE, неCONST у них LOVE"; INT MAN [ Boss, Friend, Nice ...]; INT LOVE [ SEX, Flirt, LOVE]; SEEK ( LOVE ); FOUND MAN; IF ( Man[Boss] ) FOUND SEX; IF ( Man[Friend] ) FOUND Flirt; IF ( Man[Nice] ) DO Why; ELSE New SEEK; Примечание: могут сказать, а как же все же найти свою любовь. Ну, до- рогие дамы, если вы считаете, что это задачу за вас смогут решить маши- ны... 2. Муж вернулся из командировки... INT Lover is IN_FRIDGE; INT Husband is FOOL; LONG CHAR Kill ( Lover must die! ); INT Furniture[Dresser, Bed, ...]; RETURN ( Husband ); Husband; SEEK ( Lover ); IF ( Furniture[Any] ) FOUND { SAY Kill; SUX; } ELSE RULEZ; Муж, конечно, успокоится, не найдя любовника. Но что будет с любовни- ком, который спрятался в холодильнике? И вправду удовольствия познаются через страдания. 13. Задачи. Как вы уже поняли, Male C - универсальный язык программирования, пос- редством которого можно решать обширный круг повседневных задач. Единс- твенный путь изучения языка - говорить на нем. Предлагаем несколько за- дач для самостоятельного решения: 1. Классический треугольник: вы любите его, он любит другую, а она любит вас. Варианты решений: - вы добиваетесь его взаимности; - вы добиваетесь ее взаимности; - вы становитесь их взаимности; - вы отвечаете взаимностью своей собаке. Примечание: могут возразить, что классический треугольник выглядит по-другому. Однако мы полагаем, что если двое влюблены в одного, то это не треугольник, а угол: ------>  /|\ | | 2. Вариант без соперницы: Вы любите его, а он любит себя. Попробуйте сами найти все решения. 3. Вас шеф активно добивается вас. Варианты решения: - вы отвергаете его домогания и теряете работу; - вы уступаете ему и теряете свое достоинство; - вы знакомите его со своим другом-бандитом и он теряет свое досто- инство. 4. Ваш муж постоянно ходит налево. Варианты решения: - уехать к маме; - скалкой своротить ему скулу так, чтобы он мог смотреть только напра- во; - самой сходить налево. Множество других проблем вы сможете найти в известной книге, классике нашего дела "1001 проблема про это" а также в журнале "Все проблемы, ко- торые вы хотели решить, но не имели для этого подходящего инструмента". Примечание: Проблемы Male C- можно найти и в популярной газете "C-pid Info". и в передаче "Я C-ама. В передаче "LOVE C 1 взгляда" обсуждаются проблемы языка LOVE C версии 1. В журнале "5 How C" вы найдете более сложные задачи из языка версии 5. 14. Послесловие В следующей книге мы разберем особенности реализации Male C+, Male C++, и вообще Male Cn+. К сожалению, мы не будем обсуждать проблемы лю- бой реализации языка C- по понятным морально-этическим причинам. сентябрь 1997 ПАЛЕК