我需要了解longjmp函数如何工作; 我知道它的作用,但我需要知道它是如何做到的.
我试图在gdb中disas代码,但我无法理解一些步骤.代码是:
0xb7ead420 <siglongjmp+0>: push %ebp
0xb7ead421 <siglongjmp+1>: mov %esp,%ebp
0xb7ead423 <siglongjmp+3>: sub $0x18,%esp
0xb7ead426 <siglongjmp+6>: mov %ebx,-0xc(%ebp)
0xb7ead429 <siglongjmp+9>: call 0xb7e9828f <_Unwind_Find_FDE@plt+119>
0xb7ead42e <siglongjmp+14>: add $0x12bbc6,%ebx
0xb7ead434 <siglongjmp+20>: mov %esi,-0x8(%ebp)
0xb7ead437 <siglongjmp+23>: mov 0xc(%ebp),%esi
0xb7ead43a <siglongjmp+26>: mov %edi,-0x4(%ebp)
0xb7ead43d <siglongjmp+29>: mov 0x8(%ebp),%edi
0xb7ead440 <siglongjmp+32>: mov %esi,0x4(%esp)
0xb7ead444 <siglongjmp+36>: mov %edi,(%esp)
0xb7ead447 <siglongjmp+39>: call 0xb7ead4d0
0xb7ead44c <siglongjmp+44>: mov 0x18(%edi),%eax
0xb7ead44f <siglongjmp+47>: test %eax,%eax
0xb7ead451 <siglongjmp+49>: jne 0xb7ead470 <siglongjmp+80>
0xb7ead453 <siglongjmp+51>: test %esi,%esi
0xb7ead455 <siglongjmp+53>: mov $0x1,%eax
0xb7ead45a <siglongjmp+58>: cmove …Run Code Online (Sandbox Code Playgroud) 尝试编写一个给出值和列表的过程,它会删除列表中写入的值的所有出现:
delMember(X, [], []) :- !.
delMember(X, [X|Xs], Y) :- !, delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- !, delMember(X, Xs, Y2), append([T], Y2, Y).
Run Code Online (Sandbox Code Playgroud)
由于cut此代码无法正确回答如下问题:
delMember(Y, [1,2,3,1,2,3,1,2,3], [1, 2, 1, 2, 1, 2 ]).
Run Code Online (Sandbox Code Playgroud)
如果我删除剪辑:
delMember(X, [], []).
delMember(X, [X|Xs], Y) :- delMember(X, Xs, Y).
delMember(X, [T|Xs], Y) :- delMember(X, Xs, Y2), append([T], Y2, Y).
Run Code Online (Sandbox Code Playgroud)
它在以下查询中失败:
delMember(Y, [1,2,3,1,2,3,1,2,3], [1,2,3,1,2,3,1,2,3]).
Run Code Online (Sandbox Code Playgroud)
(true当正确的答案是时,返回false).
如何使它在两种情况下都能正常工作?
也许我可以X is not T在第三行代码中检查一下,我试过:
delMember(X, [T|Xs], Y) :- …Run Code Online (Sandbox Code Playgroud) 我想实现show(二进制)函数的方法,并使其能够distingish内功能(a -> a).
像伪haskell代码的东西:
instance Show (a->b) where
show fun = "<<Endofunction>>" if a==b
show fun = "<<Function>>" if a\=b
Run Code Online (Sandbox Code Playgroud)
我如何区分这两种情况?
我正在尝试逐行读取文件,但是当我到达EOF时我不知道如何停止.
我有这个代码:
readWholeFile = do inputFile <- openFile "example.txt" ReadMode
readALine inputFile
readALine x = do y <- hGetLine x
print y
readALine x
Run Code Online (Sandbox Code Playgroud)
它显然总是终止提出异常.
我怎么解决?
编辑:确切的错误消息是:
*** Exception: example.txt: hGetLine: end of file
Run Code Online (Sandbox Code Playgroud) 假设我有VectorA和VectorB两种std::vector<SameType>,两种initilized(我的意思是VectorA.size() > 0和VectorB.size() > 0)
如果我做:
VectorA = VectorB;
Run Code Online (Sandbox Code Playgroud)
VectorA通常分配的内存是自动释放的?
我试着通过Dean Wampler学习一些Scala阅读Programming Scala.
我正在尝试复制一个代码片段 Enumeration
object Breed extends Enumeration {
val doberman = Value("Doberman Pinscher")
val yorkie = Value("Yorkshire Terrier")
val scottie = Value("Scottish Terrier")
val dane = Value("Great Dane")
val portie = Value("Portuguese Water Dog")
}
for (breed <- Breed) println(breed.id + "\t" + breed)
Run Code Online (Sandbox Code Playgroud)
但是,在最后一行代码中,我收到了这个错误:
value foreach is not a member of object Breed
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我怎么解决?
我正在尝试学习Haskell,但我在使用monad时遇到问题.
我导入了模块Data.Maybe.
但我不知道如何使用>>=运营商.
鉴于(>>=) :: Monad m => m a -> (a -> m b) -> m b我无法理解如何定义一个函数(a -> m b).
有人可以提供一些教学示例吗?
我正在尝试return在Scheme R6RS中实现一个函数.我想要这样的东西:
(lambda ()
(do-some-job-before)
(return some-value)
(do-some-job-after))
Run Code Online (Sandbox Code Playgroud)
执行(do-some-job-before),不执行 (do-some-job-after)和lambda函数的最终值some-value.
我想我必须继续使用.我试过了:
(define return #f)
(call/cc (lambda (k)
(set! return k)))
Run Code Online (Sandbox Code Playgroud)
但它不起作用; 例如
(+ 2 (return 3)) ; -> 3 (and not 5 as I expected)
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?