PLT 板


LINE

看板 PLT  RSS
※ 引述《ilway25 (Nick)》之铭言: : ※ 引述《subtropical (风大雨大)》之铭言: : : 几个问题请教大家 : : 1.所谓pure和impure的差别? : : 我的理解是: : : pure: Output跟input直接相关 可预测 : : impure: Output会受到环境的影响 不可预测 : : 但还是觉得不清不楚的... : : 2.有关exponential : : expt :: Integer -> Integer -> Integer : : expt x 0 = 1 : : expt x n = x * expt x (n-1) : : 这个方法好像需要用到很多空间? : : (原因是因为乘法回圈的关系) : : 乘法是 n*(n-1)*(n-2)*..*1 -> n-1次吗?? : : 书上有提到一位Dirk提出用even跟odd算expt的方法,怎麽用haskell表示呢? : 我也是 Haskell 新手,若有错还麻烦指正 : 1. 可以看看这个 : http://stackoverflow.com/questions/4382223/pure-functional-language-haskell 这边提到用 side-effect 来区分,其实不大有效,主要原因是 要严格定义 side-effect 有实务上的麻烦,这是依照抽象化的层次而定, 因为 CPU 内的 program counter (或 instruction pointer)会改变, 必须讲清楚是语言内可见的范围,但语言定义的 state 是什麽又是另一件事情了。 pure function 就是他跟数学上说的函数是一样的, 给定同样的输入,输出必然一样。跟可不可预测无关。 impure function 则是给定同样的输入,至少存在两个不一样的结果。 所以并不是 C/C++ 的程式没有 pure function, 而是所有的 Haskell function 都是 pure function。(这点其实尚有争论) : 2. exponentiation 是密码学中很重要的一环,因此有许多技巧可以来实作 : http://en.wikipedia.org/wiki/Exponentiation_by_squaring : 用even和odd的方法应该是上面文中的第一个: : 直接照抄实作可能如下 : expt :: Integer -> Integer -> Integer : expt x 1 = x : expt x n : | even n = expt (x * x) (div n 2) : | odd n = x * expt (x * x) (div n 2) : 也可以偷看 Haskell 自己的 (^) 怎麽实作 : http://www.haskell.org/onlinereport/standard-prelude.html : 你写的 expt 的空间部份: : expt x n = x * (x * (x * ... * (x * 1))) : 所以 haskell 会展开很多项,直到能算 x * 1 = x,再往上算一层 x * (x * 1) : 一直到最後一层 其实 Haskell 不会展开成 x* (x * ... * (x * 1))) 才开始算, 实际上根据 lazy evaluation 应该是 x * expt x n -> x * x * expt x n -> x^2 * expt x (n -1) -> x^2 * x * expt x (n-2) -> ... -> x^n 但空间上还是 O(n), 因为每个 expt x n 都会被记录下来直到某个上界为止, 超过上界的话就真的是 O(1) 了。 至於其他的实作方式则主要是减少时间复杂度,而不是处理空间复杂度。 根据记忆写的,有错的话请麻烦订正。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 80.195.203.67
1F:推 ilway25:我觉得 lazy evaluation 不会知道结合律耶,但我不确定 12/12 10:27
2F:→ ilway25:我的认知是 如果第一个x是0,後面就不会再展开了 12/12 10:28
3F:→ Favonia:我想 impure 不代表一定存在两个不一样的结果 12/12 11:16
4F:→ xcycl:impure 是定义问题..不用 side effect 的话 12/13 05:04
5F:→ xcycl:非 pure 根据定义就是存在不同的结果 12/13 05:05
6F:→ xcycl:至於第二个是我的疏忽,不管是 inductive 12/13 05:38
7F:→ xcycl:的整数或是 Int 都不会这样算 12/13 05:39
8F:→ xcycl:但若是 Int 的话,第一个是零还是会继续展开 12/13 07:50
9F:→ xcycl:因为 * 是 primative operation 直接用底层的乘法运算定义的 12/13 07:51
10F:→ xcycl:http://ppt.cc/GtnC 可以看到 (*) :: Int -> Int -> Int 12/13 07:56
11F:→ ilway25:所以是只有像 True || (...) 才会不算了吗 12/13 09:21
12F:→ xcycl:看机器的 or 跟 * 怎麽作,从语言层面上是这样实作是一回事 12/13 17:10
13F:→ xcycl:晚点整理一下好了.. Haskell 有作 short circuit 12/13 18:02
14F:→ xcycl:evaluation 12/13 18:03
15F:推 SansWord:话说用tail recursion 会不会比较省空间? 12/14 00:27







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP