2017-02-22 96 views
0

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

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

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

+1

Я считаю, что вам следует проконсультироваться с вашим профессором. – Sam

+1

Я думаю, что понял, спасибо –

+0

@JakeLipson: Тогда ответьте на свой вопрос с ответом для будущей справки :) – garfbradaz

ответ

1

Я думаю, что я понял, ответ на мой собственный вопрос:

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

2

Ваш ТП здесь.

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

extern fun {res:[email protected]}{a:[email protected]} list0_foldleft 
    (xs: list0 a, ini: res, fopr: (res, a) -<cloref1> res): res 

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

В месте вызова,

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

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

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

+0

Спасибо, я понял это и попытался объяснить это, когда я ответил на свой вопрос, но ваше объяснение гораздо более элегантно и читаемо. –