2017-02-22 38 views
0

我有一個任務,我必須做的學校涉及使用foldleft找到列表的長度。我的問題在於執行foldleft。我們給出了一些使用foldleft將列表中的每個項目乘以x的示例代碼。我有幾個關於在ATS中的foldleft的問題

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

第三行是什麼意思?我們必須得到長度函數來處理任何數據類型,並且我假設要這樣做,我可能需要更改其中的一個或兩個。

+1

我相信你應該諮詢你的教授。 – Sam

+1

我想我想通了,謝謝 –

+0

@JakeLipson:然後回答你自己的問題,以供將來參考答案:) – garfbradaz

回答

1

我想我已經找到了答案,以我自己的問題:

首先指的是foldleft將要返回的數據類型,第二個指的是在列表中的數據類型的foldleft正在處理。對於foldright,第一個和第二個交換位置。

2

你的TA在這裏。

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,它是一個採用resa類型的兩個參數的閉包(函數+環境),並返回值爲res的值。

在調用點,

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

第一<int>正在指示返回類型resint,而第二<int>正在指示列表元素的類型是int(這可能不是你想要的)。

我相信你可以找出從這裏出了什麼問題。

+0

謝謝,我想出了這件事,並試圖在我回答自己的問題時解釋它,但你的解釋更加優雅和可讀。 –