基本上我已经创建了一个多态树数据类型,我需要一种计算给定树中元素数量的方法.这是我的Tree数据类型的声明:
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
Run Code Online (Sandbox Code Playgroud)
所以我可以像这样定义一个Ints树:
t :: Tree Int
t = Node (Leaf 5) 7 (Node (Leaf 2) 3 (Leaf 7))
Run Code Online (Sandbox Code Playgroud)
但是,我需要一个函数来计算其中一个列表中的元素数量.我已经定义了这个递归函数,但是我得到错误"推断类型不够通用":
size :: Tree a -> Int
size Empty = 0
size (Leaf n) = 1
size (Node x y z) = size x + size y + size z
Run Code Online (Sandbox Code Playgroud)
这里有什么我不该做的吗?
我试图扩展一个递归下降的解析器来处理新的运算符,并使它们正确关联.最初只有四个运算符(+ - /*),它们都具有相同的优先级.我正在看的函数是parseExpRec函数:
parseExpRec :: Exp -> [Token] -> (Exp, [Token])
parseExpRec e [] = (e, [])
parseExpRec e1 (op : ts) =
let (e2, ts') = parsePrimExp ts in
case op of
T_Power -> parseExpRec (BinOpApp Power e1 e2) ts'
T_Plus -> parseExpRec (BinOpApp Plus e1 e2) ts'
T_Minus -> parseExpRec (BinOpApp Minus e1 e2) ts'
T_Times -> parseExpRec (BinOpApp Times e1 e2) ts'
T_Divide -> parseExpRec (BinOpApp Divide e1 e2) ts'
T_GreaterThan -> parseExpRec (BinOpApp GreaterThan e1 e2) …
Run Code Online (Sandbox Code Playgroud) 我想这样做,所以我的一个UILabel只显示最多3位数.所以,如果相关值是3.224789,我想看3.22.如果值是12.563,我想看12.5并且如果值是298.38912那么我想看298.我一直在尝试使用NSNumberFormatter来实现这一点,但是当我将最大有效数字设置为3时小数点后总是有3位数.这是代码:
NSNumberFormatter *distanceFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[distanceFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[distanceFormatter setAlwaysShowsDecimalSeparator:NO];
[distanceFormatter setMaximumSignificantDigits:3];
Run Code Online (Sandbox Code Playgroud)
我一直以为'有效数字'表示小数点前后的所有数字.无论如何,有没有办法使用NSNumberFormatter完成这个?
谢谢!
我刚刚发现了LLDB的这个方便功能,它允许我编写Python脚本,当我在LLDB中的断点时,可以访问帧中的变量.但是在Xcode(v4.5.2)中使用它时遇到了一些问题.首先,我找不到任何说明我应该保留这些Python脚本的地方,以便我可以从LLDB的命令行导入它们.其次,在我键入script
LLDB后,键盘输入有点错误:退格键不会删除屏幕上的字符,但会有效地从命令中删除它.所以打字primt<bsp><bsp><bsp>int
有效意味着print
,但它仍然出现primtint
在终端上.这只是美学,但它很烦人!
有人能指出我使用Python与LLDB的一些Xcode特定资源吗?
编辑:这是另一个有趣的链接,说你可以使用Python为Python创建变量的自定义摘要,但我找不到任何与此相关的内容.
我正在开发一种基于用户控制球的游戏,该球在屏幕上的区域之间移动.屏幕的"地图"在文件ThreeDCubeGame.cpp中定义:
char m_acMapData[MAP_WIDTH][MAP_HEIGHT];
Run Code Online (Sandbox Code Playgroud)
ThreeDCubeGame.cpp处理大部分与地图有关的事情,但播放器(和键盘输入)由ThreeDCubePlayer.cpp控制.当玩家进入新的地图单元格时,游戏必须检查该单元格的内容并采取相应的行动.我正在尝试使用ThreeDCubeGame.cpp中的这个函数:
inline char GetMapEntry( int iMapX, int iMapY ) { return m_acMapData[iMapX][iMapY]; }
Run Code Online (Sandbox Code Playgroud)
因此,为了检查播放器是否被允许移动到地图单元格中,我使用来自ThreeDCubePlayer.cpp的此函数调用:
if (ThreeDCubeGame::GetMapEntry(m_iMapX+MAP_OFF_X, m_iMapY+MAP_OFF_Y) == ' ')
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,当我编译它时,我收到警告"错误C2352:'ThreeDCubeGame :: GetMapEntry':非静态成员函数的非法调用".这与变量的范围有关吗?如果不重新设计所有代码,它是否可以修复?
基本上我已经定义了一个Tree数据类型,其定义如下:
data Tree a = Empty
| Leaf a
| Node (Tree a) a (Tree a)
deriving (Eq, Ord, Show)
Run Code Online (Sandbox Code Playgroud)
现在我必须创建一个函数来将值插入到有序树中(它不必对树进行排序,只需添加值).这是我到目前为止所提出的:
insert :: a -> Tree a -> Tree a
insert x Empty = Leaf x
insert x (Leaf m) | m < x = Node (Leaf x) m Empty
| otherwise = Node Empty m (Leaf x)
insert x (Node l m r) | x > m = Node (Leaf l) m (insert x r)
| otherwise = Node …
Run Code Online (Sandbox Code Playgroud) 我正在尝试生成一个带有一些点的静态谷歌地图,以及连接这些点的一些线条(我很快就会将这些线条与行车路线相对应,但后来会出现这种情况).现在我有这样的代码来生成URL:
def getStaticMapAddress(self, route):
url = "http://maps.google.com/maps/api/staticmap?center="+str(route[0].location.lat)+","+str(route[0].location.lng)+"&zoom=6&size=400x400&markers="
i=0
while i<len(route):
url += str(route[i].location.lat)+","+str(route[i].location.lng)
i=i+1
if (i < len(route)):
url += "|"
url += "&path=color:0xff0000ff&weight:5"
i=0
while i<len(route):
url += "|"+str(route[i].location.lat)+","+str(route[i].location.lng)
i+=1
url += "&sensor=false"
return url
Run Code Online (Sandbox Code Playgroud)
在此功能中,"路线"是具有相关位置的用户列表.使用我的测试数据,生成了以下URL:
http://maps.google.com/maps/api/staticmap?center=50.8202008,-0.1324898&zoom=6&size=400x400&markers=50.8202008,-0.1324898|51.447341,-0.0761212|51.4608947,-2.5884312&path=color:0xff0000ff&weight:5|50.8202008,-0.1324898|51.447341,-0.0761212|51.4608947,-2.5884312&sensor=false
Run Code Online (Sandbox Code Playgroud)
如果查看静态地图,可以看到标记,但不能看到路径.我一直在查看这方面的文档(http://code.google.com/apis/maps/documentation/staticmaps/#Paths),我看不出哪里出错了.查看示例,我的URL似乎与示例具有完全相同的格式.有谁知道我做错了什么?
谢谢
本
我有一个带有自定义光标的应用程序,我使用 NSCursor 的自定义包装器实现了该应用程序(大部分主要代码设计为可移植操作系统,因此在上面我假装 NSCursor 是 Windows 样式的光标)。当用户 cmd+tabs 回到窗口时,我遇到了一些光标没有改回我的自定义问题的问题,我想看看是什么改变了 currentCursor 的值。到目前为止,我尝试设置断点的任何地方都没有给我任何信息。
所以,我想知道是否有办法(在 Xcode 中)在 [NSCursor currentCursor] 的值发生变化时立即中断。这可能吗?我的应用程序可以访问此类数据吗?
谢谢 - 我希望我已经说清楚了。当我什至不确定我想做什么时,很难解释!
我正在尝试编写一些函数来读取MIDI文件.我一直指的是许多提供规范的网站,但主要是这一个:http://www.sonicspot.com/guide/midifiles.html
我一直在我下载的超级马里奥兄弟主题的MIDI文件上测试它,我得到了一些意想不到的数据.可能是文件格式错误,但我认为更有可能是我做错了.下面是我遇到的麻烦的数据(从十六进制编辑器),什么我想我知道这件事情:
4D 54 72 6B 00 00 00 19 00 FF 51 03 05 7B 71 00 FF 58
|---------| |---------| || || || |------| || ||
MTrk Chunk size || || || Tempo || ||
(25 bytes) || || ||(ms per || ||
\/ || ||1/4 note) || ||
VLen value || || \/ ||
(Event at time 0)|| || VLen value ||
\/ || (event at ||
Beginning of || time 113) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试重构我的架构,以便当前简单的字段ForeignKey
变为GenericForeignKey
. 所以,在我的模型中,这个:
ref_track = models.ForeignKey(Track, unique=False, related_name='posts_by_ref')
Run Code Online (Sandbox Code Playgroud)
...变成这样:
ref_content_type = models.ForeignKey(ContentType)
ref_id = models.PositiveIntegerField()
ref_object = generic.GenericForeignKey('ref_content_type', 'ref_id')
Run Code Online (Sandbox Code Playgroud)
以前我posts_by_ref
在一些数据库查询中使用过,例如检查附加到轨道的帖子的提交状态(帖子对象是上述字段所在的位置)。但是,我知道related_name
使用 a 时不支持GenericForeignKey
,那么还有另一种方法来复制这种行为吗?