Схема: «ожидает 1 аргумент, учитывая 4» странное поведение - PullRequest
0 голосов
/ 19 февраля 2012

Чтобы реализовать поиск в глубине в сетке, я написал такую ​​функцию

(define (expand dim node visited obs)
  (not-in (neighbor dim obs node) visited))

Функция dfs:

(dfs dim obs visited fringe path goal)

Единственное появление expand in dfs is

(expand dim (car fringe) visited obs)

И я позвонил dfs , используя

(dfs '(5 5) '((2 2) (3 2)) '((2 1)) '((1 1) (3 1)) '((2 1)) '(4 5))

dim это измерение - это список заблокированных позиций в сетке.

*1024* Когда я вызываю , разверните вручную, это прекрасно работает.Но когда он вызывается в dfs , он говорит " expand: ожидает 1 аргумент, учитывая 4: '(5 5)' (1 1) '((2 1))' ((2 2) (3 2) (3 4) (4 4) (5 4))"

Однако, если я изменю позицию аргументов , развернем , например, положим obs в качестве второго аргумента,

(define (expand dim obs node visited)
  (not-in (neighbor dim obs node) visited))

и соответственно измените dfs и мои вызовы, тогда ошибка не появится и все будет работать хорошо.Затем в следующий раз, когда я запускаю DrRacket и вставляю в него измененный код, снова появляется та же ошибка.Если я поменяю obs назад, это снова хорошо работает ... Что здесь происходит ?!Спасибо!

Ответы [ 2 ]

1 голос
/ 19 февраля 2012

Похоже, это та же проблема, что и у вас в этом вопросе .Как и в этом случае, expand - это функция, которая уже определена в Racket, но написание собственного определения все равно должно работать нормально.Итак, как я сказал там, вы должны описать точно , что вы делаете, чтобы знать, почему у вас эти проблемы в первую очередь.

1 голос
/ 19 февраля 2012

expand - это очень общее имя, которое может иметь определение где-то еще.Переименуйте свою функцию в dfs-expand и посмотрите, исправит ли она это.

...