【发布时间】:2019-07-19 06:00:42
【问题描述】:
我正在参加 MOOC(没有学分)。分配的问题之一是使用以下函数编写阶乘函数:
(’a->’a)->(’a->bool)->’a->’a
我已经创建了这个函数:
fun do_until (f, g) = fn x => case g(f x) of
false => f x
| _ => do_until(f,g) (f x);
但我在使用我的 do_until 函数来实现阶乘时遇到了困难。
我认为解决方案应该遵循以下格式:
fun factorial x = (do_until (f, g)) x
我看到的问题是“g”函数只能验证结果,如果验证,则返回该结果。由于函数类型描述符相当严格,它限制您将元组传递给 g,然后验证元组的一部分并返回另一部分。 IE。 (factorial, int to mult) 然后 g 将从 #2 验证并返回 #1。不幸的是,这些类型阻止了这一点。我开始认为使用 do_until 作为辅助函数是不可能的,除非您以其他方式计算阶乘,然后“g”只会将您的结果与该结果进行比较。如果我错了,请告诉我下一步该去哪里!
【问题讨论】:
标签: sml