Каков синтаксис для построения значения списка в ATS?

#ats

#ats

Вопрос:

Например, как я могу создать список, состоящий из всех цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, и 9.

Ответ №1:

Вы можете создать его с помощью val xs = ($list {int} (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)) .

Убедитесь, что вы указали правильные функции выделения памяти, передавая -DATS_MEMALLOC_LIBC компилятору при использовании этого кода.

Комментарии:

1. Для значения list0 вам нужно val xs = g0ofg1($list{int}(...))

Ответ №2:

Если вы компилируете в JavaScript через atscc2js, то вам нужно создать список следующим образом:

 val ds =
  0::1::2::3::4::5::6::7::8::9::nil{int}()
// end of [val]
  

Это также работает для таргетинга на C.

Существуют также комбинаторы для такого рода вещей. Например,

 val ds = (10).list_map(TYPE{int})(lam(i) => i)
val ds = list_tabulate_cloref<int>(10, lam i => i)
  

Ответ №3:

Вы можете найти специальный литерал в режиме emacs:

https://github.com/githwxi/ATS-Postiats/blob/653af81715cf6bfbd1d2cd5ece1e88c8c3912b4a/utils/emacs/ats2-mode.el#L287

 (defvar ats-special-keywords
  '("$arrpsz" "$arrptrsize" "$delay" "$ldelay" "$effmask" "$effmask_ntm" "$effmask_exn" "$effmask_ref"
    "$effmask_wrt" "$effmask_all" "$extern" "$extkind" "$extype" "$extype_struct" "$extval" "$lst"
    "$lst_t" "$lst_vt" "$list" "$list_t" "$list_vt" "$rec" "$rec_t" "$rec_vt"
    "$record" "$record_t" "$record_vt" "$tup" "$tup_t" "$tup_vt" "$tuple" "$tuple_t"
    "$tuple_vt" "$raise" "$showtype" "$myfilename" "$mylocation" "$myfunction" "#assert" "#define"
    "#elif" "#elifdef" "#elifndef" "#else" "#endif" "#error" "#if" "#ifdef"
    "#ifndef" "#print" "#then" "#undef" "#include" "#staload" "#dynload" "#require"))
  

Если вы найдете какое-либо ключевое слово, вы можете легко узнать, как его использовать в doc / EXAMPLE / directory:

 $ git clone https://github.com/githwxi/ATS-Postiats.git
$ cd ATS-Postiats/doc/EXAMPLE
$ grep -r "$list" . | head
./MISC/word-chain.dats:  $list{word}("", "")
./MISC/word-chain.dats:  $list{word}("", "")
./MISC/mysendmailist.dats:$list{string}
./MISC/monad_list.dats:  $list{a}("this", "that", "a")
./MISC/monad_list.dats:  $list{a}("frog", "elephant", "thing")
./MISC/monad_list.dats:  $list{a}("walked", "treaded", "grows")
./MISC/monad_list.dats:  $list{a}("slowly", "quickly")
./ATSLF/CoYonedaLemma.dats:val myintlist0 = g0ofg1($list{int0}(I(1), I(0), I(1), I(0), I(0)))
./ATSLF/YonedaLemma.dats:  $list{bool}(True, False, True, False, False)
./ATS-QA-LIST/qa-list-2014-12-07.dats:$list{double}(0.111111, 0.222222, 0.333333)
  

Ответ №4:

Для значения list0 вы можете сделать

 val xs = g0ofg1($list{T}(x1, ..., xn))
  

где T — тип элементов в xs. Например,

 val some_int_list = g0ofg1($list{int}(0, 9, 8, 7, 3, 4))