Ruby中的递归函数中是否存在Stack Overflow错误的解决方法?
比方说,我有这个块:
def countUpTo(current, final)
puts current
return nil if current == final
countUpTo(current+1, final)
end
Run Code Online (Sandbox Code Playgroud)
如果我打电话countUpTo(1, 10000),我会收到一个错误:stack level too deep (SystemStackError).
它似乎在8187处突破.是否有一些函数我可以调用告诉Ruby忽略堆栈的大小,或者增加最大堆栈大小的方法?
我试图在Rails中将一个数组数组保存到我的SQLite数据库中.
现在,我有一个可以容纳这样一个数组的对象,实例看起来没有任何问题.但是,它显然没有被持久化到数据库中 - 当我在My_Object.array上调用不同于创建数组的视图中的函数时,它出现了nil并且不起作用.
例如:
class My_Object < ActiveRecord::Base
attr_accessor :array
end
Run Code Online (Sandbox Code Playgroud)
当我打电话时My_Object.new(:array => [ [1, 2, 3], [4, 5, 6] ]),一切似乎都能正常工作,但我无法:array在其他地方访问该物业,它只是零.
有任何想法吗?
我正在努力构建一个基本的音乐创作系统.我可以在记忆中表现音乐,但我(显然)希望能够输出实际的声音!我真的不在乎格式是什么(MIDI,mp3,ogg等等).我只是希望能够将样本加载到程序中并以最简单的方式播放它们.我一直在寻找解决方案,但我所看到的一切都是a)太复杂(开销方面)满足我的需求,b)没有得到积极支持,或c)没有充分记录.我希望看到一个声音输出或其他方面的例子,这是最简单的方法.
我现在一直在Haskell 工作解决Project Euler#14一段时间了,但出于某种原因,我无法让它工作.我刚才使用Groovy解决了这个问题,我想我在这里使用的方法基本相同.然而,即使只找到前10,000个长度,程序运行速度也非常慢,而我现在真的迷失了原因.我认为我正在使用memoization,但即使GHCI中的数据集很少,我也会耗尽内存.
这是我到目前为止所提出的.
collatz = (map collatz' [0..] !!)
where collatz' n
| n == 1 = 1
| n `mod` 2 == 0 = 1 + collatz (n `div` 2)
| otherwise = 1 + collatz (3 * n + 1)
Run Code Online (Sandbox Code Playgroud)
我正在运行map collatz [1..1000000]以获得问题的答案,但是map collatz [1..10000]给了我一个内存不足的错误,并且还需要几秒钟才能完成运行.
如果有人能给我一些关于这个程序的问题的见解,那就太好了!我尝试了很多东西,我只是陷入困境,需要一只手.
谢谢!
我正在尝试设置一个Google地图实例,其中为一组点动态生成一些内容.
现在,我正在使用for循环遍历任意数量的纬度和经度值,并创建标记是地图上的那些点.
我正在尝试添加与这些标记相对应的信息窗口,并在单击标记时弹出它们.
但是,我遇到了一些麻烦.除了eventListener部分之外,它看起来像我的for循环基本上创建了一切正常工作:
function drawMap(points) {
popUps = new Array();
infoWindows = new Array();
positions = new Array();
contents = '<div id = "content">' +
'<div id="siteNotice">' +
'</div>' +
'<p id="firstHeading" class="firstHeading">Position</h1>' +
'</div>';
infowindow = new google.maps.InfoWindow({
content: contents
});
for( i = 0; i < points.length; i++ ){
positions[i] = new google.maps.Marker({ position:
latlng[i],
map:map,
title:"Position"});
popUps[i] = '<div id = "content">' +
'<div id="siteNotice">' +
'</div>' +
'<p id="firstHeading" class="firstHeading">Position</h1>' +
'</div>';
infoWindows[i] = new …Run Code Online (Sandbox Code Playgroud) 我有一段代码看起来像这样:
data SomeData = A | B | C | D | E deriving (Show, Enum)
Run Code Online (Sandbox Code Playgroud)
我希望能够轻松地将某些值映射到这些类型.说我想要char映射到一个SomeData类型,我可能这样做:
mappings = zip "abcde" [A, B, C, D, E]
Run Code Online (Sandbox Code Playgroud)
这会产生[('a',A),('b',B)...]等等.我希望Enum类型类可以让我能够[A, B, C, D, E]通过使用一些便利函数将数据类型转换为上面描述的列表()来轻松地做到这一点.
标准库中有这样的功能吗?或者我是否需要自己定义它,如果我想使用这样的东西?
对不起,这个冗长且令人困惑的标题!这是我的问题:我正在尝试编写一个函数来输出另一个函数所需的时间.通常我只是传递函数及其参数,但在这个例子中,我试图计时的函数将函数作为参数.
举一个具体的例子,我试图让它工作:
void foo(void (*f) (T*)){
...function stuff...
}
--------not sure what this should be
|
void runWithTime(void (*f) (void (*g) (T*))){
f(g)
}
//runWithTime(foo);
Run Code Online (Sandbox Code Playgroud)
我希望能够打电话runWithTime(foo),但我不确定该类型runWithTime的论点应该是什么.
任何帮助都会很棒!提前致谢.
我认为形成这个问题的最好方法是用一个例子......所以,我决定询问这个问题的实际原因是因为Euler项目的问题55.在这个问题中,它要求找到低于10,000的Lychrel数.在命令式语言中,我会得到导致最终回文的数字列表,并将这些数字推送到我的函数之外的列表中.然后,我会检查每个传入的号码,看它是否是该列表的一部分,如果是,只需停止测试并得出结论,该号码不是Lychrel号码.我会用非lychrel数字及其前面的数字做同样的事情.
我之前已经做过这件事并且很好地完成了.然而,实际上在Haskell中实现这一点似乎是一个很大的麻烦,而不是在我的函数中添加一堆额外的参数来保存前驱,而绝对的父函数来保存我需要存储的所有数字.
我只是想知道是否有一些我在这里缺少的工具,或者是否有任何标准作为这样做的方法?我已经读过Haskell有点"自然缓存"(例如,如果我想将奇数定义为odds = filter odd [1..],我可以随时引用它,但是当我需要动态添加元素时,它似乎变得复杂了名单.
有关如何解决这个问题的任何建议?
谢谢.
PS:我不是要求回答Project Euler问题,我只想更好地了解Haskell!
我正在尝试在Haskell中编写一个brainfuck解释器作为一个练习/有趣的项目,我遇到了一个小问题.
Brainfuck的"while循环"结构只是括在括号内的一系列命令.我正在尝试以一种方式构建语法树,我将操作符存储在[数据构造函数内部的循环中.
这就是命令和语法"树"的数据声明当前的样子:
data Operator = Plus
| Minus
| RShift
| LShift
| Dot
| Comma
| SBracket [Operator]
| EBracket
deriving (Show, Eq)
type STree = [Operator]
Run Code Online (Sandbox Code Playgroud)
我正在尝试做的是采取一些String命令,"+><[.>]"并将其解析为STree如下所示:
[Plus, RShift, LShift, SBracket [Dot, RShift], EBracket]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我只能得到一个一维列表String,因为我不知道如何检查列表的头是否是SBracket为了将新的运算符放在它的运算符列表而不是主要清单的负责人.
这是我用来解析的函数:
matchChar :: Char -> Maybe Operator
matchChar c = case c of
'+' -> Just Plus
'-' -> Just Minus
'>' -> Just RShift
'<' -> Just LShift
'.' …Run Code Online (Sandbox Code Playgroud) 这真让我烦恼.我正在使用C++重载比较运算符,我得到一个奇怪的错误,我不知道如何纠正.
我正在使用的代码如下所示:
bool HugeInt::operator==(const HugeInt& h) const{
return h.integer == this->integer;
}
bool HugeInt::operator!=(const HugeInt& h) const{
return !(this == h);
}
Run Code Online (Sandbox Code Playgroud)
这里integer是一个short [30]
该==超载工作正常.但是当我尝试在!=身体中使用它时,它告诉我==尚未定义.我是C++的新手,所以欢迎任何提示.
谢谢!
我来自 Haskell 的背景。我非常习惯于使用递归函数和典型的高阶函数(折叠、映射、过滤器等)和组合函数来完成任务。我现在正在 node.js 中进行开发,我非常想编写自己的模块来实现这些功能,这样我就可以以一种对我有意义的方式在我的代码中使用它们。
我的问题基本上是:Javascript 是否可以处理这种类型的负担?我知道前面提到的递归函数可以很容易地重构为迭代函数,但是很多时候我发现自己在函数内调用了很多函数,我不知道Javascript是否可以很好地处理这种类型的事情。我知道像 Underscore 这样的东西存在并实现了一些 FP 原则,但我的问题基本上归结为:在 Javascript 中进行函数式编程是一种好习惯吗?如果没有,为什么不呢?
如果这个问题对 SO 来说有点太软,我也很抱歉,但是如果一旦它变得太大就会破坏一切,我不想开始整理我自己的工具集。
我正在尝试将此数据类型设为以下实例Functor:
data Fraction = Frac Integer Integer deriving Show
Run Code Online (Sandbox Code Playgroud)
但是,像这样定义它将不起作用:
instance Functor Fraction where
pure = Frac 1 1
fmap f (Frac a b) = Frac (f a) (f b)
Run Code Online (Sandbox Code Playgroud)
我想要这个功能,我希望数据是Functor的一个实例.但是,这是否违反了一些法律,因为参数Fraction总是两个Integers?
我总是可以fmap自己写一下并避免Functor声明,但我正试图更熟悉这种语言,所以任何帮助都会受到赞赏!
我不是Coldfusion的专家(坦率地说,我对此几乎一无所知),但我的任务是设置一个Atom提要,以显示在我们客户的一个网页上.
我已经设法正确连接所有内容,并且能够在外部网站上显示Feed.我仍然有一个问题 - 我需要一个链接到帖子,并且feed在该字段下显示了一系列由逗号分隔的相同内容的不同链接.
我只需抓住第一个就可以嵌入它.如果没有我只是解析字符串的天真方法(我也不知道如何在CF中做),有没有一种简单的方法可以做到这一点?
这是我现在用于生成内容的代码,该linkhref字段是我需要获取的第一个成员:
<cfset feedurl="http://*******.blogspot.com/atom.xml" />
<cffeed source="#feedurl#" properties="feedmeta" query="feeditems" />
<ul>
<cfoutput query="feeditems">
<li>#title#</li>
<li>#linkhref#</li>
<li>#content#</li>
</cfoutput>
</ul>
Run Code Online (Sandbox Code Playgroud)
我得到的回报是这样的:http://*****.blogspot.com/2012/09/****.html,http://****.blogspot.com/feeds/****/comments/default,http://****.blogspot.com/2012/09/****等等.
任何帮助将不胜感激!谢谢!