термологический вопрос

Dec 08, 2012 21:36

Коллеги! Не будет ли слишком изощренным издевательством во вводной части обзора Агды, при самом начале обсуждения типа Vec привести такие примеры

[true,false,true] : Vec Bool 3
[2,12,85,0,6] : Vec ℕ 5
Поясню - я не хочу в этом месте вдаваться в детали описания конструкторов, а скрытый здесь грандиозный обман я честным образом раскрою позже.

agda

Leave a comment

Comments 22

ulysses4ever December 8 2012, 17:41:58 UTC
Я Агды не знаю совсем, но пример мне нравится! Интуитивно понятно. Готов потерпеть обман ради такого.

Reply

deni_ok December 8 2012, 17:47:17 UTC
на самом деле в Агде все лексемы должны быть отделены друг от друга пробелами. То что стоит слева от каждого оператора типизации (:) - просто идентификатор (причём валидный :)

Reply

ulysses4ever December 8 2012, 17:48:24 UTC
А, круто…

Reply

ext_610527 December 8 2012, 18:37:05 UTC
Сурово. Кто-нибудь на автомате с пробелами напечатает - и твой обман раскроется.

Reply


akuklev December 8 2012, 20:08:53 UTC
Эм, тонкое, тонкое извращение. :)

Reply

deni_ok December 8 2012, 21:05:15 UTC
Надо сказать этим извращением активно пользуются в стандартной библиотеке, за милую душу обзывая переменную типа m ≤ n идентификатором m≤n.

Reply

nivanych December 9 2012, 06:15:27 UTC
"Ви так говорите, как будто, в этом есть что-то плохое"
Ну так, если знать простое правило про идентификаторы, то ничего страшного-то нет.
В большинстве текстовых редакторов и просто средств для просмотра кода, визуально "m ≤ n" легко отличить от "m≤n".

Reply

nivanych December 9 2012, 06:17:10 UTC
Хотя и помнится, по-первости, меня слегка раздражало "идентификатор a+b неизвестен".
Причём, я не сразу на это натолкнулся - обычно, я пишу через пробел ;-)

Reply


dima_starosud December 8 2012, 20:44:10 UTC
Я думаю, в вводной части обязательно нужно сказать о пробелах, юникоде и синтаксисе - это ведь база, и здесь ничего сложного нету, просто пробелы, всего то.
Кстати, а как вы такой вектор сделали? Это в стандартной библиотеке? Или это псевдокод?

Reply

deni_ok December 8 2012, 20:58:56 UTC
Это форменное издевательство, как и было объявлено:

module VecTest where

open import Data.Nat
open import Data.Vec

[2,12,85,0,6] : Vec ℕ 5
[2,12,85,0,6] = 2 ∷ 12 ∷ 85 ∷ 0 ∷ 6 ∷ []

Reply

dima_starosud December 8 2012, 21:09:52 UTC
Ну это будет тогда на приключенческий фильм похоже, где в конце зритель внезапно осязает всю суть происходящего.
Скажите, пожалуйста, а как вы до кульминации планируете такое довести?

Reply

deni_ok December 8 2012, 21:13:56 UTC
Да нет, это случайно вышло. Я во введении хотел рассказать общие вещи про зависимые типы, но нужны какие-то примеры. Полезла Agda, ну и следовательно всякие детали синтаксиса. А вдаваться в них там не очень к месту.

Буду думать.

Reply


nivanych December 9 2012, 06:12:05 UTC
Если в сноске признаться, что тут обман, который честным образом раскроется позже, то нормально, думаю.

Reply

deni_ok December 9 2012, 06:40:41 UTC
Да, так пока и сделал.

Reply


nivanych December 9 2012, 06:23:26 UTC
Но надо сказать, что 2 ∷ 12 ∷ 85 ∷ 0 ∷ 6 ∷ [] выглядит не так и плохо, чтобы зачем-то надо было обманывать.
Можно оператор составить и из одного символа, только с более простым набором.
Но для чтения, это малосущественно.

Reply


Leave a comment

Up