четверг, 19 сентября 2013 г.

Ужас какие "закорючки"

http://pastebin.com/a1Kx0kcF

  1. 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. И речь ОТНЮДЬ не идёт о "естественном языке" и тем более не об "искусственном интеллекте". И не о том, чтобы "это было просто писать". ОТНЮДЬ. Такие задачи - НИКТО не ставит. Формальная логика и грамматика - ВСЁ РАВНО там везде присутствует.

Но! Речь идёт о том, чтобы это хоты бы ЧИТАТЬ можно было бы "просто". Типа "по-русски".

9 комментариев:

  1. >В итоге - "самодокументируемый код"

    Это сказка. Код на таком языке просто невозможно будет воспринять, он будет переполнен ненужными деталями, а выразительность будет околонулевая

    >А "закорючки" - я бы оставил бы интегралам, тензорному счислению и уравнениям Максвелла.

    О каких закорючказ речь? Операторы в любом ЯП есть.

    ОтветитьУдалить
    Ответы
    1. По мне - "многословность" - лучше, чем "закорючки".

      Хотя когда-то я и исповедовал другое мнение.

      "О каких закорючказ речь?"

      data State st a = State (st -> (a, st))

      -- что вот тут написано? Понятно только просвещённым?

      Операторы в любом ЯП есть.

      -- есть конечно, но ОБЫЧНО они повторяют операторы из математики. Которую изучают в школе. Или в ВУЗе.

      Операторы типа "<<" - не берём.

      Удалить
    2. "Код на таком языке просто невозможно будет воспринять"

      и как интересно люди литературу читают?

      Удалить
    3. " а выразительность будет околонулевая"

      -- я уже давно понял, что для вас - "выразительность" это "сокращение количества символов".

      У меня - другое мнение. И я его вам тоже уже озвучивал.

      Для меня "выразительность" - практически ТОЖДЕСТВЕННА "самодокументируемости".

      Ну не в век FORTRAN живём.. Ей богу...

      Удалить
  2. > что вот тут написано? Понятно только просвещённым?

    Поверьте, от того что "закорючку" "->" заменили бы на слово "морфизм", понятней оно бы не стало. А без знания синтаксиса на любом языке возникнут вопросы. Здесь претензии не к хаскелю - у него то как раз минималистичное ядро.
    Эта строчка объявляет параметризируемый двумя параметрами тип данных State, и сопоставляет его с одноимённым конструктором от (морфизма из первого типа-параметра в пару (второй тип-парметр, первый тип-параметр).
    Причём тип, как видите очень простой, а описание выше - тихий ужас.

    >и как интересно люди литературу читают?

    Вы же не думаете, что в итоге литература получится? И я не совсем об этом: хотелось бы посмотреть как с (комбинированными) монадами, стрелками, и прочим весельем смотрелся бы в "читаемом виде"(пока предсталвляется нечто в десятки раз объёмнее). Сама "читаемость" - возможность охватить код взглядом падает до нуля. К тому же такая "документация" сильно избыточна. Его придётся мысленно интерпретировать. Это большой минус для восприятия кода знающими людьми.

    >-- я уже давно понял, что для вас - "выразительность" это "сокращение количества символов".

    Выразить больше смысла меньшими усилиями. Речь здесь не об сокращении размера идентификаторов вроде "begin" -> "{", "string" -> "str", а в сокращении их количества.

    ОтветитьУдалить
    Ответы
    1. Про типы? Просто там совсем другая система типов.

      >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, то программа будет прервана в связи с ошибкой сопоставления.

      Если есть вопросы - задавайте. =)

      Удалить
    2. Вам надо не на Хаскель смотреть, а на Кобол уж тогда...

      Удалить