gpt4 book ai didi

scheme - 当我在另一个函数中定义一个函数时,出现 'bad placement define'错误

转载 作者:行者123 更新时间:2023-12-03 08:14:01 24 4
gpt4 key购买 nike

这是我的代码:

 (require 'hash-table)

(define (hash-table-get htable key)
((hash-inquirer equal?) htable key))

(define (hash-table-add! htable key val)
((hash-associator equal?) htable key val))

(define (hash-table-remove! htable key)
((hash-remover equal?) htable key))


(define (find-max-chain)
(define table (make-hash-table 1000)) ; works
.
.
. ; proven working code

(define (get-chain number) (let ((chain (hash-table-get table number))) chain))

.
.
. ; more code




max-entry)
(find-max-chain)

问题是 (define (get-chain number) [...] ))部分。当我在全局上下文中在 table之外定义它和 (find-max-chain)时,在运行它时会成功。但是,当我在需要的 (get-chain)中定义 (find-max-chain)时,执行 (find-max-chain)时,我从SCM收到此错误:
;ERROR: "problem14-new.scm": bad placement define
; in expression: (define (get-chain! number) (let ((chain (hash-table-ge ...
; in scope:
; (update-max! table max-chain max-entry . #@define)
; () procedure find-max-chain
; defined by load: "problem14-new.scm"

;STACK TRACE
1; (#@define ((update-max! (#@lambda (entry chain) (cond ((> chai ...
2; (#@find-max-chain)
3; (#@define ((hss (#@has-suffix? #@file (#@scheme-file-suffix))) ...

为什么是这样?

最佳答案

在函数内部,define仅在函数(或类似函数的主体)的开头,在任何情况下都等于letrec。请参阅R5RS中的this section

关于scheme - 当我在另一个函数中定义一个函数时,出现 'bad placement define'错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com