У меня есть несколько вопросов о foldleft в ATS

У меня есть задание, которое я должен выполнить для школы, которое включает в себя использование foldleft для нахождения длины списка. Мой вопрос заключается в реализации foldleft. Нам дали пример кода, который использует foldleft для умножения каждого элемента в списке на x.

implement
list0_mult(xs) =
list0_foldleft<int><int>(xs, 1, lam(res, x) => res*x)

Что означает третья строка? Мы должны заставить функцию длины работать с любым типом данных, и я предполагаю, что для этого мне может понадобиться изменить один или оба из них.


person Jake Lipson    schedule 22.02.2017    source источник
comment
Я считаю, что вам следует проконсультироваться с вашим профессором.   -  person muZero    schedule 22.02.2017
comment
кажется я разобрался, спасибо   -  person Jake Lipson    schedule 22.02.2017
comment
@JakeLipson: Тогда ответьте на свой вопрос ответом для дальнейшего использования :)   -  person garfbradaz    schedule 22.02.2017


Ответы (2)


Кажется, я нашел ответ на свой вопрос:

Первый относится к типу данных, который foldleft будет возвращать, а второй относится к типу данных, который находится в списке, с которым имеет дело foldleft. Для foldright первое и второе места меняются местами.

person Jake Lipson    schedule 22.02.2017

Ваша ТА здесь.

list0_foldleft имеет следующее определение. (Вы можете найти это в своем задании.)

extern fun {res:t@ype}{a:t@ype} list0_foldleft
  (xs: list0 a, ini: res, fopr: (res, a) -<cloref1> res): res

Здесь {res:t@ype} — это первый аргумент шаблона, представляющий тип возвращаемого значения, а {a:t@ype} — второй аргумент шаблона, представляющий тип элемента списка. Для fopr его тип — (res, a) -<cloref1> res, который представляет собой замыкание (функция + среда), принимающее два аргумента типа res и a и возвращающее значение типа res.

На сайте вызова,

list0_foldleft<int><int>(xs, 1, lam(res, x) => res*x)

первый <int> указывает, что возвращаемый тип res — это int, а второй <int> указывает, что тип элемента списка — int (что, вероятно, не то, что вам нужно).

Я считаю, что вы можете понять, что идет не так отсюда.

person Steinway Wu    schedule 23.02.2017
comment
Спасибо, я понял это и попытался объяснить это, когда ответил на свой вопрос, но ваше объяснение намного элегантнее и читабельнее. - person Jake Lipson; 23.02.2017