haskell - 如何将函数调用的值存储到变量中
问题描述
我有这个功能,我需要检查gdc
数字[1..n]
和n
是== 1
,然后做一些计算。所以我被卡住了,因为我找不到将 n 的初始值存储到变量的方法。
例如,如果我用数字 7 调用函数,它是一个递归,所以n
变成6
then5
等等,所以我不能gdc
正确;例如1-7
那么2 - 7
那么3 -7
。你知道我如何存储变量的值n
吗a
?
myproduct :: Integer->Integer
myproduct 0 = 1
myproduct n
|gcd n (n from first call) /= 1 = myproduct (n-1)
|otherwise = x
where
x = n * myproduct (n - 1)
解决方案
使用辅助函数(通常称为go
)进行递归,并在最外层调用中使用与递归调用不同的变量名,如下所示:
myproduct :: Integer->Integer
myproduct orig_n = go orig_n
where
go 0 = 1
go n
|gcd n orig_n /= 1 = go (n-1)
|otherwise = x
where
x = n * go (n - 1)
推荐阅读
- r - devtools::document 尝试将目录作为文件打开
- mysql - 子嵌套数组为空的续集条件
- node.js - ZMQ 丢失订阅连接
- android - 如何在 android 的 volley post 请求中永久放置有效的 cookie?
- python - 如何将打印语句的输出也放入用户剪贴板
- java - 如何为我的 Traccar 开源项目下载和连接 MySql 以进行 GPS 跟踪
- android-studio - 有没有办法在没有 vpn 的情况下创建一个新的颤振项目?
- jquery - 在 contenteditable 中交替字体颜色
- python - 使用正则表达式在python中的数据框或列中的大写字母之前添加空格
- sql - 错误 1022:无法写入;表 '#sql-209c_8' SQL 语句中的重复键: