| Автор | Сообщение |
Михаил
120 сообщений |
#2641 2010-07-08 21:18 GMT+3 часа(ов) |
|
Жаль, что при определении типа через define-type, он может зависеть только от набора других типов. Например, мне нужен тип Matrix, вот как я его могу определить, используя комбинации из других типов:
(define-type Matrix (Vectorof (Vectorof Number)))Но, под этот тип подпадает очень много всего и, причем, не матриц: (define-predicate matrix? Matrix)Такая ограниченная типизация не греет. Также мне нужен тип Type, чтобы я мог работать с типами, так же как и со всем остальным (мог передавать в функцию и т.п.), чтобы >(ann Natural Type)Было бы намного интереснее, если бы Vectorof (Listof и т.п.) был перегружен, чтобы можно было еще задать и число, соответствующее длине вектора, тогда бы можно было написать нечто вроде (define-type: (foo [a : Type] [n : Natural] [m : Natural])Почему они до сих пор этого не сделали? Если я в чем-то неправ или чего-то недопонимаю, то объясните мне. |
|
ander-skirnir
62 сообщений |
#2642 2010-07-09 08:29 GMT+3 часа(ов) |
|
> Если я в чем-то неправ или чего-то недопонимаю, то объясните мне.
Не парьтесь - переходите на нашу сторону. У нас это есть более двадцати лет. Вот, например, матрица как Вы хотите: (deftype square-matrix (type size) отредактировал(а) ander-skirnir: 2010-07-09 08:41 GMT+3 часа(ов) |
|
ander-skirnir
62 сообщений |
#2643 2010-07-09 08:52 GMT+3 часа(ов) |
|
Это только для квадратной матрицы, а можно гораздо круче - для произвольной:
(defun equidimensional (a) Обратите внимание на satisfies. |
|
misha
465 сообщений |
#2644 2010-07-09 17:19 GMT+3 часа(ов) |
|
В typed racket пока что отсутствует тип данных array(SRFI 25). Почему? Да потому что до него еще руки не дошли)
#lang typed/racket |
|
Михаил
120 сообщений |
#2646 2010-07-09 20:28 GMT+3 часа(ов) |
|
2ander-skirnir
это, конечно, все интересно, но тут у нас typed racket, понимаешь. 2misha > SRFI 25 У них там, кстати, из SRFI только 14, все остальные пока не переписаны. Насчет твоего решения – выходит все дополнительные ограничения можно соблюсти, используя самописный конструктор make-<имя-типа>? Но такое решение не катит: на кой черт тогда нужна такая типизация? Она на то, в частности, и нужна, чтобы make’и всякие и предикаты автоматически создавались, в соответствии указанному типу. Или, может, я заблуждаюсь? |
|
misha
465 сообщений |
#2647 2010-07-09 23:59 GMT+3 часа(ов) |
|
>Но такое решение не катит: на кой черт тогда нужна такая типизация? Она на то, в частности, и нужна, чтобы make’и всякие и предикаты автоматически создавались, в соответствии указанному типу.
define-type непреднозначен для создания сложных типов данных. А конструктор и предикаты так или иначе писать придется. Остается только дождаться когда они классы к typed racket прикрутят. P.S. При написании поста у меня в третий раз за неделю сдох xorg=(. |
|
Михаил
120 сообщений |
#2648 2010-07-10 01:42 GMT+3 часа(ов) |
|
Не а, предикаты писать вручную не нужно, ведь есть define-predicate. Конструкторы тоже, только, надеюсь пока, для структур.
|
|
Михаил
120 сообщений |
#2650 2010-07-10 02:06 GMT+3 часа(ов) |
|
И define-type тоже не нужен. Типы должны быть такими же объектами, как и все остальное и тоже иметь свой тип... В общем, у меня есть виденье идеальной (на мой взгляд) статической типизации в scheme. Могу вкратце осветить (но это лишь черновик-набросок идеи, т.е. ничего конкретного, если неинтересно, то можете даже не смотреть и не пытаться вникнуть):
|
|
Михаил
120 сообщений |
#2669 2010-07-26 18:57 GMT+3 часа(ов) |
|
2ander-skirnir
Поясню, почему CL в пролете: (defun f (x y)У вас все функции имеют один тип. |
|
misha
465 сообщений |
#2684 2010-08-03 15:55 GMT+3 часа(ов) |
|
Для этого придумали делегаты.
|
|
Михаил
120 сообщений |
#2685 2010-08-03 16:59 GMT+3 часа(ов) |
|
Чиво? Какие в СL делегаты? По-моему они только в .NET языках. И какое они вообще имеют отношение к теме?
|
|
misha
465 сообщений |
#2686 2010-08-03 17:56 GMT+3 часа(ов) |
|
>Чиво? Какие в СL делегаты? По-моему они только в .NET языках.
Delegates >И какое они вообще имеют отношение к теме? Можно создать структуру(либо класс) для хранения сведений о функции(или любом другом объекте). |
|
Михаил
120 сообщений |
#2687 2010-08-03 19:00 GMT+3 часа(ов) |
|
Суть в том, что нужен тип, а не костыли поверх языка. Как мне писать ФВП?
|
|
antares0
95 сообщений |
#2688 2010-08-04 02:23 GMT+3 часа(ов) |
|
Есть funcаllable-instance, есть ftype. Только функции высших порядков перпендикулярны (на мой взгляд) типам и классам.
|
|
misha
465 сообщений |
#2689 2010-08-04 15:16 GMT+3 часа(ов) |
|
Рэкет все-таки нагляднее
(define-type CUBE (Number -> Number)) отредактировал(а) misha: 2010-08-04 15:28 GMT+3 часа(ов) |
|






