SML中的Pascal三角形

时间:2015-08-15 17:04:18

标签: functional-programming sml

我试图写一个类型的函数:

while(searchNodePtr != NULL && (*searchNodePtr).data != dataValue) {
    prevNodePtr = searchNodePtr;
    searchNodePtr = (*searchNodePtr).next;  
}

其中一对int分别代表Pascal三角形的行和列。

这是我的尝试:

pascal : int * int -> int

它适用于我的基本情况,但否则给我奇怪的输出。例如:

fun pascal(i : int, j : int) : int = if (i = 0 andalso j = 0) orelse i = j orelse i = 0 then 1 else pascal(i - 1, j - 1) + pascal(i - 1, j); 给了我11,pascal(4, 2)给了我15

它有点奇怪,因为只要if子句失败并且else被评估,我确实想要返回上面一行元素和上面一行元素和左边一个元素的总和。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

考虑pascal 1 0。如果您对表使用从零开始的索引,那么这应该等于1.但是:

pascal 1 0 = pascal 0 -1 + pascal 0 0 = 2

你应该设置一些警卫来处理j大于i的负指数和指数。