微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 Monkey repl 在我的程序中恐慌?

如何解决为什么 Monkey repl 在我的程序中恐慌?

我用 Monkey PL 编写了一个简单的程序(请参阅 https://interpreterbook.com/ 中的规范):

let fib = fn(x){
  if(x>-1){
    if(x<2){return x}
    fib(x-1)+fib(x-2)
  }   
}

let max = fn(x,y){if(x>y){x} else {}}

let simple_faulhaber  = fn(x){
  if(x==0){
      return 0
  }
  if(x>0){
    x + simple_faulhaber(x-1)
  }
}

在 repl 中测试我的函数时,似乎一切正常:

>> fib(13)
233
>> max(3,2)
3
>> simple_faulhaber(13)
91
max(simple_faulhaber(13),fib(13))*2

但是,当我在 repl 中要求对 max(simple_faulhaber(13),fib(13))*2 求值时,求值器会恐慌:

>> max(simple_faulhaber(13),fib(13))*2
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x4b7d57]

谁能给我解释一下,为什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。