Спор
26-01-2006 19:42
к комментариям - к полной версии
- понравилось!
Мой спор с Колей.
Вторник, 24 Января 2006 г. 20:29
Мы с Колей работаем вместе и тут унас зашел спор ......причем он ....затянувшийся ....спор о "Искуство программирования" Кнута, о Паскале о формализации и тд я его приведу, но сразу говорю он длинный и не усвояемый ....:)
(Я), (К) и (С) - Сергей он то и начал наш спор.
Зашел парень попросил книжку по программированию....
(Я) Если ни на каком и опыта ноль и теория отстствует, тогда попробуй почитать Дональда Кнута "Искусство программирования", сразу всё станет на место, а теория никому ещё не мешала. Да, книга в 3-х томах, после ее прочтения любой язык легко уваивается.
(С)Ага!!! Ты чего людям неопытным советуешь!!! Я его пробовал читать когда уже несколько лет на байсике сидел (ох как давно это было) и на паскале чуть чуть!!! Так я нифига не понял!!! Я только сейчас доходить нацинаю!!! А еще у ентой книги есть один недостаток!!! Там язык програмирования. на котором примеры прог написаны, какой-то странный!!! Енто что фортран?
Но ежлив ты профи и хочешь стать гуру эта книга для тебя!!!
(Я)насколько я сейчас помню, Кнут строит виртуальный копьютер и на основе его решает все задачи. Дело в том что первым моим языком был ассемблер и мне было проще понять его изложения. Прочитать эту книгу вполне реально если ты обстрагируешься от существующих языков программирования. А эту книгу нам толкали в институте тк моя спец. инженер-симтемотехник по дисциплине естественные языки программирования.
(К)инженер-симтемотехник по дисциплине естественные языки программирования?
Так их же вроде еще нету?
(Я)есть, вспомни терминальные и не терминальные символы, не терминальные символы могут рассматриватся как элементы естественного языка, те обычный русский язык можно привести к совокупности правил по которым строятся не терминальные символы, при этом он станет алгоритмичиским языком, который можно легко привести к машинному языку. Вся эта лабуда связанна была с тем что бы машина могла понимать предложения напечатанные и после их разборки выполнять те или иные действия. Когда нам читали этот курс мы тихо вешались читал зав. кафедрой, который это все пытался реализовать. Язык базировался на базе знаний, весьма вероятно что название на текущий момент у него другое.
Терминальные символы М А П С (пробел не считается)
Не терминальные символы МАМА ПАПА СПАМ
(К) Это, скорее всего, идеи вашего завкафедрой. Но проблема не в синтаксисе, а в семантике. Беда в том, что значение фразы зависит от подразумеваемого контекста. Классический пример, конечно, с предложением "Дух крепок, но плоть слаба" (в машинном переводе "Запах сильный, мясо протухло"), но можно привести и другие примеры, например, из Азимова, когда на просьбу подать руку человекоподобный робот решил, что его просят отдать его руку. Или, из того же Азимова, пример с роботом, которого попросили сильно потянуть за рычаг - робот согнул рычаг, поскольку никто не предупредил его о границе разумного применения силы. На самом деле можно привести огромное множество примеров. Даже люди понимают друг друга часто с трудом, а то и вообще не понимают.
Чтобы понимать естественный язык, машина должна иметь в себе модель мира. База знаний - по сути, искусственный интеллект. Хотя команды роботу (или солдату) отдавать на упрощенном языке можно. Получится язык "ЛОГО" для маленьких детей. Но никто не программирует на ЛОГО. Также как никто не описывает математику словами, для этого применяют символы. "Естественные языки программирования" примерно то же, что "естественное описание математики". Неточно и многословно.
Человеко-машинный интерфейс - да. Например, "Выдайте вероятные причины цепной реакции на корпусе звездолета. Данные возьмите со спутника." ("Бессмертный с Веги", польский фантаст Конрад Фиолковский). Поболтать с компьютером тоже можно. Но программировать на естественном языке... Формальные языки придуманы не просто так, а для однозначности описаний и устранения двояких толкований. И еще краткости. А идея естественного языка идет от первого Кобола, когда вместо фортрановского A=2+3 "для естественности" предлагалось писать "СЛОЖИТЬ 2 И 3 ПОЛУЧАЯ A". Pascal благополучно избавился от перебора в естественности, хотя сохранил слова типа begin и end, придав им, однако, точный смысл. И то искушенные программисты все-таки использовали язык С с его { и } вместо begin и end.
"И уж совершенно анекдотическим был заданный Вирту вопрос о «засилье» английского языка в... языках программирования. «Не пора ли заменить все эти BEGIN, END, WHILE, UNTIL и прочие англицизмы на слова национальных языков?» – профессор Никлаус Вирт был поставлен и перед таким вопросом. «Вы понимаете, – ответил слегка удивленный профессор (я не выдумываю, вопрос действительно был для Вирта ошарашивающим, это было отлично заметно), – все эти слова в языках программирования уже давно не слова, а символы. Символы с устоявшейся семантикой. Так зачем менять символы?»."
То есть для программирования надо фактически переопределить естественный язык, сильно ограничив спектры значений слов, сделав слова естественного языка не обычными словами, а символами со строго определенным значением. В противном случае описание даже простых действий потребует громоздких уточнений. "Нарисуй окно размером двести пятьдесят четыре пикселя по горизонтали и сто двадцать пять пикселов по вертикали, отстоящее от левого верхнего угла экрана на ..." - и это еще очень понятный для компьютера пример. Хотя на "естественном языке" тут же потребовались бы уточнения: "Перекладины в окне рисовать? А занавески стандартные?" Откуда компьютеру знать, рисую я на экране окно дома или окно программы? Окно-то имеет в естественном языке много значений. Например, окно запуска New Horizons заканчивалось в начале февраля. Дело в том, что язык создается для определенной цели, и использовать естественный язык для программирования примерно то же, что использовать алгоритмизованный язык для общения между людьми. Другая предметная область.
Оптимально естественный язык использовал именно Pascal, созданным Никлаусом Виртом. Вирт применил в Pascal'е обычные английские слова, очень ограничив и формализовав их смысл. Фактически это мнемонический язык. При желании можно назвать его "естественным", но действительно "естественный язык" - это тот, в котором компьютер сам решает, идет ли речь об окне программы или изображении окна дома. Однако для программирования такое огромное расширение предметной области совершенно не нужно. А повышение "естественности" алгоритмического языка практически выльется в удобный для диктовки, но неудобный для записи алгоритмический язык вроде примера с языком Кобол.
(Я) в целом ты прав, но вот пример "Дух крепок, но плоть слаба" (в машинном переводе "Запах сильный, мясо протухло") слегка не верен, создавая базы знаний человек выступает в роли учителя программы, те корректируя узловые точки, что так же аналогично обучению ней. сети. Перед БЗ стоит (точнее будет стоять) весьма узкая область приминения. Да, о программирование - главное в программировании это формализовать задачу. Если мы вспомним как учатся программировать то увидим интересный аспект, сначала дается обобщеное задание, затем строится алгорит, а по алгоритму пишется программа. Человеку с накоплением опыта не требуется уже прибегать к столь строгому подходу, он на ходу формализует задачу и сразу приступает к написанию программы. Я о том что человек выступает как посредник между формальным и не формальным языком. Семантика, не так страшна, а БЗ будет непонятно другое что именно от нее хотят из за неоднозначности не формального языка. Далее я отсылаю посмотреть Искусственный или естественный язык общения в АОС все дело состоит в адаптивности самого языка, чем выше его адаптивность тем более широкий спектр задачь он может решить и даже (верится с трудом) формализовать не формальное задание, ранее всё упиралось в производительнось, теперь это задачу пытаются решить. Ведь проблема формализации лежит в однозначности не формального языка, наиболее формальным является англ. язык, но он весьма неоднозначен. Человек во всех случаях стремится к простоте и лаконичности, но одновременно с этим ему нужна гибкость для выражения все возрастающей сложности окружающего мира. Язык со временем может в чем-то упрощаться, как это произошло с английским, но одновременно с этим он должен дать человеку механизм получения новых понятий и смысловых оттенков. И именно поэтому сложность любого естественного языка никогда не является недостатком. Синтаксис это - правила построения правильных высказываний внутри языка. Когда у нас есть определенный набор лексем (неважно каких - лексем русского языка или лексем языка Паскаль), то у вас есть правила, как из правильных слов собрать правильное предложение. Вот именно этим и занимается синтаксис. Семантика, естественно, занимается не этим. Семантика занимается смыслом. Семантика говорит, если у нас есть лексема или правильно построенное предложение, то оно значит то-то. Обычно лексеме приписывается пара - означаемое и денотат, иногда только означаемое. Слово денотат поясню на примере. Когда я говорю стол, то денотатом будет вот этот конкретный стол, а общее понятие языка "стол" будет означаемым. Сейчас пытаются выходить на уровень кейс-систем, систем проектирования текстографических программ. (CASE - Computer Aided Software Engineering). Расшифровывается - разработка программного обеспечения с компьютерной автоматизированной поддержкой, отрываемся кое-где от языка, переходим на язык графики.
То есть от автокода к CASE, далеее посмотрим.
))))) I expect continuation ......
вверх^
к полной версии
понравилось!
в evernote