2016-03-02 27 views
3

我想在SML中实现一个重复的平方算法。我希望它是尾递归。如何检查标准ML中的整数的基数2表示?

目标是乘以所有x^k,其中k是2^m,2^m是n的二进制表示中的1。

例如,对于x^25,地计算x^1 * X^8 * X^16因为16 + 8 + 1 = 25

我不知道如何表示一个数字由它的二进制部分,或使用按位操作来手动检查(因为从我可以告诉SML没有按位操作)。

我更喜欢使用开箱即用的SML库,因此不需要导入其他库。

这是一个家庭作业问题,所以如果你能够回答而没有完全放弃它,这将是伟大的。

编辑:我正在使用新泽西州的SML。

+1

虽然sml没有任何按位运算符,sml基础库有一个“基本类型”,它具有执行按位运算的功能 – matt

+0

你能告诉我在哪里寻找按位AND吗? –

+1

当然,对不起,如果我之前太模糊http://sml-family.org/Basis/word.html#SIG:WORD.andb:VAL – matt

回答

1

感谢马特,我找到了解决方案。

使用来自SML基础库Word类型,我使用:

Word.andb(Word.fromInt(x)中,Word.fromInt(Y))> Word.fromInt(0)

+1

这不是一个答案。在downvoters出现之前,你应该删除它。 – molbdnilo

+0

我添加了这个,因为我想将其标记为已解决,但似乎需要等待2天。我会编辑以获得解决我的问题的答案。 –