如果像lambda演算或Ocaml这样的curry语言中的CPS如何有意义?从技术上讲,所有函数都有一个参数.所以说我们在一种语言中添加了CPS版本:
cps-add k n m = k ((+) n m)
Run Code Online (Sandbox Code Playgroud)
我们称之为
(cps-add random-continuation 1 2)
Run Code Online (Sandbox Code Playgroud)
这与以下相同:
(((cps-add random-continuation) 1) 2)
Run Code Online (Sandbox Code Playgroud)
我已经看到两个调用不是尾调用,实际上是一个复杂的嵌套表达式,(cps-add random-continuation)返回一个值,即一个消耗数字的函数,然后返回一个消耗另一个数字的函数,然后将两者的总和传递给那个random-continuation.但是我们不能通过简单地将它转换为CPS来解决这个值,因为我们只能给每个函数一个参数.我们需要至少有两个为继续和"实际"论证腾出空间.
还是我完全错过了什么?
我在verilog中看到一个声明integer level = log(N)(其中N是一个参数,级别是确定的)但是我知道我不能在verilog中做复杂的数学语句,所以我想知道是否有上述问题的替代解决方案?
任何反馈意见!
我在Haskell中需要一个String tokenizer,但在Prelude或其他模块中显然没有定义任何内容.Data.Text中有splitOn,但这很难用,因为你需要将String包装到Text.
令牌器不是很难做到这一点我写了一个(它不处理多个相邻的分隔符,但它适用于我需要它).我觉得这样的事情应该已经在模块中了.
这是我的版本
tokenizer :: Char -> String -> [String]
tokenizer delim str = tokHelper delim str []
tokHelper :: Char -> String -> [String] -> [String]
tokHelper d s acc
| null pos = reverse (pre:acc)
| otherwise = tokenizer d (tail pos) (pre:acc)
where (pre, pos) = span (/=d) s
Run Code Online (Sandbox Code Playgroud)
我在互联网上搜索了更多解决方案并找到了一些讨论,比如这篇博文.
最后一条评论(由Mahee于2011年6月10日发布)特别有趣.为什么不使一个版本的单词功能更通用来处理这个?我试着搜索这样的功能但没找到..
有没有更简单的方法,或者'标记'字符串不是一个非常反复出现的问题?:)
pow1 b e
| (e == 0) = 1
| otherwise = b * pow1 b (e-1)
Run Code Online (Sandbox Code Playgroud)
我在.hs文件中有完全相同的代码,加载时我总是得到相同的解析错误.我不认为它实际上包含任何错误 - 所以我目前的想法是"|" 标志不是哈斯克尔想要的,但它是我的Macbook键盘上的标准键盘(使用Mac OS).是否有可能,如果是这样,我该怎么回事呢?我正在使用TextEdit编写代码,并打开纯文本设置.
使用度数角度时,我想定义度数符号(°)作为后缀运算符.目前,我使用此行(在GHCi中):
let o = pi/180
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
tan(11*o)
Run Code Online (Sandbox Code Playgroud)
但我想去:
tan 11°
Run Code Online (Sandbox Code Playgroud)
这更清楚.学位操作员应该具有比' tan'和其他功能更高的优先级.
我最接近的是:
let (°) x _ = x*pi/180
Run Code Online (Sandbox Code Playgroud)
像这样使用:
tan(11°0)
Run Code Online (Sandbox Code Playgroud)
但是默认优先级意味着仍然需要parens,并且使用虚拟数字,这个替代方案比我目前使用的更差.
我在Ubuntu 11.04上使用Scala 2.9.0.final.从命令行启动scala大约需要20秒才会出现提示.
我意识到我应该期待一些延迟,因为它必须引导编译器JAR文件,但我很难相信它应该是20秒 - 我担心我可能有一些配置错误.
编辑
所以我尝试了jstack,它提供了一个超出我头脑的长输出.我看到一个线程正在等待互斥锁.但看看以下的输出time:
21.96s user 0.66s system 135% cpu 16.711 total
Run Code Online (Sandbox Code Playgroud)
似乎它在两个内核上花费了相当多的周期...所以也许它不仅仅是在那个时候阻塞互斥锁?
2011-07-28 11:45:02
Full thread dump OpenJDK 64-Bit Server VM (20.0-b11 mixed mode):
"Attach Listener" daemon prio=10 tid=0x00000000023ea000 nid=0x19a9 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Thread-0" prio=10 tid=0x00007f7768304800 nid=0x19a8 runnable [0x00007f776cd92000]
java.lang.Thread.State: RUNNABLE
at scala.collection.generic.Growable$$anonfun$$plus$plus$eq$1.<init>(Growable.scala:48)
at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)
at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:128)
at scala.collection.TraversableOnce$class.toList(TraversableOnce.scala:242)
at scala.collection.mutable.WrappedArray.toList(WrappedArray.scala:33)
at scala.collection.immutable.List$.apply(List.scala:434)
at scala.Option.toList(Option.scala:231)
at scala.tools.nsc.util.DirectoryClassPath.asURLs(ClassPath.scala:321)
at scala.tools.nsc.util.ClassPath.sortString(ClassPath.scala:284)
at scala.tools.nsc.util.ClassPath.hashCode(ClassPath.scala:289)
at scala.collection.mutable.FlatHashTable$HashUtils$class.elemHashCode(FlatHashTable.scala:349)
at scala.collection.mutable.HashSet.elemHashCode(HashSet.scala:39)
at scala.collection.mutable.FlatHashTable$class.containsEntry(FlatHashTable.scala:109)
at scala.collection.mutable.HashSet.containsEntry(HashSet.scala:39)
at …Run Code Online (Sandbox Code Playgroud) 这在tryhaskell.org上进入无限循环.我不知道为什么.
last $ filter (<100) $ [2..] >>= (\a -> if 0 == (length $ filter (== 0) $ map (mod a) $ [2..a-1]) then (return a) else [])
Run Code Online (Sandbox Code Playgroud) 如何将Scheme中的这些程序转换为CPS表格?
(lambda (x y)
((x x) y))
Run Code Online (Sandbox Code Playgroud)(lambda (x)
(lambda (f)
(f (lambda (y)
(((x x) f) y))))
Run Code Online (Sandbox Code Playgroud)((lambda (x) (x x)
(lambda (x) (x x))
Run Code Online (Sandbox Code Playgroud)*这不是任何功课!
是否有Scala(或Java,我猜)相当于标准?我不仅仅是在讨论基准测试库:请查看HTML结果的标准.