ATS - это статически типизированный язык программирования, который объединяет реализацию с формальной спецификацией. Ядро ATS похоже на ML, а его система типов основана на структуре Applied Type System, которая, в свою очередь, дает языку его имя. ATS обладает богатым набором функций и поддерживает зависимые типы (стиля DML), линейные типы, (встраиваемые) шаблоны, программирование с доказательством теорем (PwTP) и многое другое.
1 ответ

Как вы сравниваете шаблон с отрицательным 1?

Это не с "the pattern is expected to be formed with a constructor (of datavtype)", поскольку он соответствует специальному синтаксису free() для линейных конструкторов, а не отрицательному знаку. #include "share/atspre_staload.hats" implement main0(…
26 май '18 в 17:51
1 ответ

Есть ли способ в ATS преобразовать функцию замыкания в функцию envless?

Есть два вида функций в ATS: envless functions а также closure functions, Преобразование envless function в closure function это просто. Есть ли способ конвертировать closure function в envless один?
26 окт '17 в 03:05
1 ответ

Как заглавную букву можно превратить в соответствующую строчную в ATS?

Учитывая слово (типа string), мне нужно превратить все буквы в данном слове в строчные, прежде чем искать его в словаре. Как я могу это сделать? Есть ли специальная функция для этого?
29 окт '17 в 20:41
1 ответ

Какие типы ожидаются от многоточечной нотации?

Рассматривать: #include "share/atspre_staload.hats" fun plus_int_int(x: int, y: int): int = x + y symintr .plus overload .plus with plus_int_int implement main0() = println!("4+4+4 = ", ((4).plus(4)).plus(4)) Это работает, и ясно, что это не может б…
19 сен '18 в 19:50
1 ответ

Какова цель вызова "игнорировать" в ATS?

Я часто вижу код следующей формы в ATS: (ignoret(do_somthing()); do_somthing_else()) Какой смысл звонить ignoret в ignoret(do_something())?
29 сен '17 в 17:47
2 ответа

Есть ли приоритетная реализация очереди в ATS?

Мне нужно сделать какой-то приоритетный поиск. Может ли кто-нибудь указать мне на реализацию приоритетной очереди в ATS?
16 ноя '16 в 03:11
1 ответ

Что означает lam@ в САР?

Иногда я вижу код, подобный следующему: var foo = lam@(x: int): int => ... Каково значение lam@? В чем разница между lam а также lam@?
11 ноя '16 в 01:29
1 ответ

Приведение в исполнение gflist_vt_mergesort$cmp

В gflist_vt.sats, подпись gflist_vt_mergesort$cmp подразумевает, что порядок, используемый для сортировки, должен быть таким же, как и для марки. Я понимаю, что если дана такая функция сравнения, то она гарантирована. В этом примере gflist_vt_merges…
29 янв '17 в 12:57
1 ответ

Почему этот шаблон работает в одном файле, а не в разных файлах?

Рассмотрим array.sats: #include "share/atspre_staload.hats" fun {a:t@ype} make: (int, a) -> void array.dats: #include "share/atspre_staload.hats" staload "./array.sats" implement {a} make(n: int, x: a) = () и example.dats: staload Array = "./arra…
08 июн '18 в 22:33
1 ответ

Как вам следует выполнять простые строковые операции только для чтения со строками линейного типа?

Этот код компилируется и работает как задумано: // patscc -O2 -flto -DATS_MEMALLOC_LIBC rltest_dats.o -o rltest -latslib -lreadline #include "share/atspre_staload.hats" fn obey(cmd: string): void = case+ cmd of | "bye" => exit(0) | "hi" => pri…
08 фев '18 в 21:20
1 ответ

Есть ли поддержка вариадных функций в ATS?

Вероятно, самая известная переменная функция printf в C, который может принимать переменное количество аргументов. Есть ли способ присвоить тип printf в САР? В общем, можно ли типизировать функции вариации в ATS?
12 ноя '17 в 13:49
2 ответа

Как объединить список строк в ATS?

В основном, то, что я хочу, это функция следующего интерфейса: fun stringlst2string (list0(string)): string где stringlst2string принимает список строк и возвращает их конкатенацию.
28 окт '16 в 13:20
4 ответа

Как вы перебираете индексы строки?

Рассматривать: val example = "1234567" fn digit(c: char): int = case- c of | '0' => 0 | '1' => 1 | '2' => 2 | '3' => 3 | '4' => 4 | '5' => 5 | '6' => 6 | '7' => 7 | '8' => 8 | '9' => 9 fn f(): int = loop(0, 0) where { f…
08 янв '18 в 05:09
1 ответ

Как реализовать в ATS следующую функцию на основе хвостовой рекурсии?

У меня есть следующая рекурсивно определенная функция: fun foo(n: int): int = ifcase | n = 0 => 0 | n = 1 => 1 | n = 2 => 1 | (* else *) => foo(n-1) + foo(n-3) // end of [ifcase] Как я могу реализовать foo основано только на хвостовой ре…
17 сен '17 в 19:58
1 ответ

Как использовать строки из библиотек, враждебных BoehmGC?

Выполняя некоторые упражнения, которые использовали libedit, чтобы быстро что-то заработать, я придумал следующее: readline.sats: #include "share/atspre_staload.hats" %{# #include <editline/readline.h> #include <editline/history.h> %} fu…
02 сен '18 в 11:50
1 ответ

Как я могу получить сегмент списка в ATS?

По сути, мне нужна функция следующего типа: fun {a:t@ype} {n:int} {i,j:nat | i+j <= n} list_get_segment(list(a, n), int(i), int(j)): list(a, j) где i является начальным индексом сегмента и j длина отрезка.
28 сен '17 в 00:43
2 ответа

Превращение рекурсивной функции в хвостовую рекурсию

Я кодирую в ATS и пытаюсь создать функцию, которая находит квадратный корень из заданного целого числа. Здесь приведен код, который соответствует моим требованиям, за исключением того, что он не является хвостовой рекурсией. implement intsqrt(n) = i…
25 янв '16 в 20:40
1 ответ

Что означает ATS_EXTERN_PREFIX?

Например, я увидел следующую строку в ATSLIB: #define ATS_EXTERN_PREFIX "atslib_" Что означает ATS_EXTERN_PREFIX? какова его цель?
13 ноя '16 в 01:23
1 ответ

Что является причиной ошибки `make: Ничего нельзя сделать для 'xo'. Для некоторых x?

Я добавил новую цель (main.o) к существующему проекту: DATS_FILES = main.dats HFILES = config.h es.h gc.h input.h prim.h print.h sigmsgs.h \ stdenv.h syntax.h term.h var.h CFILES = access.c closure.c conv.c dict.c eval.c except.c fd.c gc.c glob.c \ …
04 июл '18 в 15:11
1 ответ

Как использовать (или перебирать) массив в ATS

Предположим, мы объявили массив следующим образом: dataview myarray ( a:t@ype (* element types *) , addr (* location *) , int (* size *) ) = | {l:addr} myarray_nil(a, l, 0) | {l:addr}{n:int} myarray_cons(a, l, n + 1) of (a@l, myarray(a, l + sizeof(a…
08 апр '18 в 12:07