ここに私のコードです:私は別の関数内で関数を定義するとき、私は「悪い配置定義」エラーを取得する
(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) [...]))
一部です。私がそれを定義し、グローバルコンテキストで(find-max-chain)
の外のtable
を外すと、それを実行すると成功します。私は私がそれを必要(find-max-chain)
内(get-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))) ...
これはなぜでしょうか?
私はこれが答えだと思います。実際には、私は実験を続けていましたが、最初にすべてのものを定義するletrec文を持つコードが最終的に実行されていました。ありがとう! – djhaskin987