http://pastebin.com/a1Kx0kcF
Я тоже "баловался" подобным.
Писал что-то вроде.
INTEGER VAR X
>>> X
Или
ARRAY A
>>>[] A
Но склоняюсь в последнее время к следующему:
ЦЕЛОЕ X
"взять значение со стека и поместить в {X}"
МАССИВ A
"взять значение со стека и добавить в массив {A}"
-- по-моему - это конечно "многословнее". Но! Гораздо более понятнее.
Ну или хоты бы:
ЦЕЛОЕ X
10 =: X
МАССИВ A
20 "добавить в массив {A}"
Или:
ЦЕЛОЕ X
10 "присвоить в" X
МАССИВ A
20 "добавить в массив" A
Типа - самодокументируемый код - http://www.delphikingdom.ru/asp/talktopic.asp?ID=82&Order=0&Count=10&pNo=2
"Все было перепробовано. В итоге - "самодокументируемый код". Глядя на который безо всяких комментариев и схем понимаешь, о чем это. Сложно так проектировать и писать? Непросто. Может быть, это и есть высший пилотаж?:-)"
- data State st a = State (st -> (a, st))
Я тоже "баловался" подобным.
Писал что-то вроде.
INTEGER VAR X
>>> X
Или
ARRAY A
>>>[] A
Но склоняюсь в последнее время к следующему:
ЦЕЛОЕ X
"взять значение со стека и поместить в {X}"
МАССИВ A
"взять значение со стека и добавить в массив {A}"
-- по-моему - это конечно "многословнее". Но! Гораздо более понятнее.
Ну или хоты бы:
ЦЕЛОЕ X
10 =: X
МАССИВ A
20 "добавить в массив {A}"
Или:
ЦЕЛОЕ X
10 "присвоить в" X
МАССИВ A
20 "добавить в массив" A
Типа - самодокументируемый код - http://www.delphikingdom.ru/asp/talktopic.asp?ID=82&Order=0&Count=10&pNo=2
"Все было перепробовано. В итоге - "самодокументируемый код". Глядя на который безо всяких комментариев и схем понимаешь, о чем это. Сложно так проектировать и писать? Непросто. Может быть, это и есть высший пилотаж?:-)"
А "закорючки" - я бы оставил бы интегралам, тензорному счислению и уравнениям Максвелла.
P.S. И речь ОТНЮДЬ не идёт о "естественном языке" и тем более не об "искусственном интеллекте". И не о том, чтобы "это было просто писать". ОТНЮДЬ. Такие задачи - НИКТО не ставит. Формальная логика и грамматика - ВСЁ РАВНО там везде присутствует.
Но! Речь идёт о том, чтобы это хоты бы ЧИТАТЬ можно было бы "просто". Типа "по-русски".
P.S. И речь ОТНЮДЬ не идёт о "естественном языке" и тем более не об "искусственном интеллекте". И не о том, чтобы "это было просто писать". ОТНЮДЬ. Такие задачи - НИКТО не ставит. Формальная логика и грамматика - ВСЁ РАВНО там везде присутствует.
Но! Речь идёт о том, чтобы это хоты бы ЧИТАТЬ можно было бы "просто". Типа "по-русски".
>В итоге - "самодокументируемый код"
ОтветитьУдалитьЭто сказка. Код на таком языке просто невозможно будет воспринять, он будет переполнен ненужными деталями, а выразительность будет околонулевая
>А "закорючки" - я бы оставил бы интегралам, тензорному счислению и уравнениям Максвелла.
О каких закорючказ речь? Операторы в любом ЯП есть.
По мне - "многословность" - лучше, чем "закорючки".
УдалитьХотя когда-то я и исповедовал другое мнение.
"О каких закорючказ речь?"
data State st a = State (st -> (a, st))
-- что вот тут написано? Понятно только просвещённым?
Операторы в любом ЯП есть.
-- есть конечно, но ОБЫЧНО они повторяют операторы из математики. Которую изучают в школе. Или в ВУЗе.
Операторы типа "<<" - не берём.
"Код на таком языке просто невозможно будет воспринять"
Удалитьи как интересно люди литературу читают?
" а выразительность будет околонулевая"
Удалить-- я уже давно понял, что для вас - "выразительность" это "сокращение количества символов".
У меня - другое мнение. И я его вам тоже уже озвучивал.
Для меня "выразительность" - практически ТОЖДЕСТВЕННА "самодокументируемости".
Ну не в век FORTRAN живём.. Ей богу...
> что вот тут написано? Понятно только просвещённым?
ОтветитьУдалитьПоверьте, от того что "закорючку" "->" заменили бы на слово "морфизм", понятней оно бы не стало. А без знания синтаксиса на любом языке возникнут вопросы. Здесь претензии не к хаскелю - у него то как раз минималистичное ядро.
Эта строчка объявляет параметризируемый двумя параметрами тип данных State, и сопоставляет его с одноимённым конструктором от (морфизма из первого типа-параметра в пару (второй тип-парметр, первый тип-параметр).
Причём тип, как видите очень простой, а описание выше - тихий ужас.
>и как интересно люди литературу читают?
Вы же не думаете, что в итоге литература получится? И я не совсем об этом: хотелось бы посмотреть как с (комбинированными) монадами, стрелками, и прочим весельем смотрелся бы в "читаемом виде"(пока предсталвляется нечто в десятки раз объёмнее). Сама "читаемость" - возможность охватить код взглядом падает до нуля. К тому же такая "документация" сильно избыточна. Его придётся мысленно интерпретировать. Это большой минус для восприятия кода знающими людьми.
>-- я уже давно понял, что для вас - "выразительность" это "сокращение количества символов".
Выразить больше смысла меньшими усилиями. Речь здесь не об сокращении размера идентификаторов вроде "begin" -> "{", "string" -> "str", а в сокращении их количества.
ничего не понял :-(
УдалитьПро типы? Просто там совсем другая система типов.
Удалить>data State st a = State (st -> (a, st))
data - оператор объявления типа.
State st a - это сигнатура типа. Тип с двумя типами-параметрами(вроде генерика). st и a это параметры.
После '=' следует описание "конструкторов"
State (st -> (a, st)) это "конструктор", принимающий функцию st -> (a, st), т.е функцию из первого параметра "генерика" st ->(в) пару (a, st)(второй парметр 'a' и первый параметр 'st'), и возвращающий State st a
конструктор может называться как угодно, главное с большой буквы. Их может быть несколько.
State st a = FirstState (st -> (a, st)) | SecondState Int
тип FristState как функции (st -> (a, st)) -> State st a; Т.е принимает функцию и возвращает состояние.
Конструктор ведёт себя как обычная функция, за исключением того, что поддаётся Pattern Matchng'у(сопоставлению с образцом):
--показательная функция с паттерн матчингом. Вытаскивает функцию из состояния.
myFunction :: State -> (st -> (a, st))
myFunction (FirstState x) = x
таким образом можно "вытащить" значение из FirstState. Если функцию вызвать с SecondState, то программа будет прервана в связи с ошибкой сопоставления.
Если есть вопросы - задавайте. =)
Вам надо не на Хаскель смотреть, а на Кобол уж тогда...
УдалитьЗачем?
Удалить