【发布时间】:2016-03-04 07:37:06
【问题描述】:
我正在尝试在 SML 中实现重复平方算法。我希望它是尾递归的。
目标是将所有 x^k 相乘,其中 k 是 2^m,2^m 是 n 的二进制表示中的 1。
例如,对于 x^25,计算 x^1 * x^8 * x^16 因为 16 + 8 + 1 = 25
我不知道如何用二进制部分表示一个数字,或者使用按位运算手动检查(因为据我所知,SML 没有按位运算)。
我更喜欢使用开箱即用的 SML 库,因此无需导入其他库。
这是一个家庭作业问题,所以如果你能在不完全放弃的情况下回答,那就太好了。
编辑:我使用的是新泽西州的 SML。
【问题讨论】:
-
虽然 sml 没有任何按位运算符,但 sml 基础库确实有一个“基本类型”,它具有执行按位运算的函数
-
你能告诉我在哪里可以找到按位与吗?
-
当然,对不起,如果我在sml-family.org/Basis/word.html#SIG:WORD.andb:VAL之前太模糊了
-
谢谢!如果可能的话,你能给我一个关于如何使用andb的例子吗?我一直在 sml 终端中尝试它,但我尝试的所有语法可能性都不起作用。
-
在 smlnj 这对我有用: Word.andb(Word.fromInt(1), Word.fromInt(0));您可以随时“打开 Word”,以避免在它们前面加上 Word。