2013-04-24 2 views
2

Я написал программу lisp, которая принимает два параметра, место назначения и карту в виде BST. Он выполняет поиск BST для номера получателя и печатает (найден: путь), если цель найдена. Если он не найден, он должен печатать (не найден: пункт назначения), но по какой-то причине я получаю нарушение контракта. Это не работает через мой cond правильно, и я уже возился с ним в течение тридцати минут. Может кто-нибудь помочь.Lisp Program, производящий контракт нарушение

Вот моя программа:

(define (robot goal map) 
    [code hidden for university honour code purposes] 

; Test robot function 
(robot 64 '(53() (64()()))) 
(robot 4 '(53() (64()()))) 

ответ

1

Вы упускаете один случай в процедуре (define (robot map path) ...). Что произойдет, если параметр map равен null? исправить это следующим образом:

(define (robot map path) 
    (cond ((not (null? map)) 
     [code hidden for university honour code purposes]) 
     (else '()))) ; this line was missing! 

Это точно то же самое, что я уже говорил в моем ответе на предыдущий вопрос: всегда первый случай рассмотреть, является ли вы обходом списка или дерева, это: то, что происходит если он равен нулю?

+0

Клянусь, у меня было это там. Должно быть, я случайно удалил его. Я смотрел на эту программу почти час, пытаясь понять, что случилось. Благодаря! – helloimbarbara

+0

Добро пожаловать! :) –

+0

Есть ли способ отображения «не найден: 4» без периода? И я не могу использовать функцию списка. – helloimbarbara

Смежные вопросы