У меня проблема с функцией добавления в схеме - PullRequest
0 голосов
/ 03 марта 2011

так что я работал над этой простой программой транспонирования, может кто-нибудь сказать мне, почему мое приложение не работает?

(define stuff
  (lambda (x y)
      (if (null? y) 0)
      (if (not (null? (car y))) (stuff (append x (list (map car y))) (map cdr y)))
  ))

(define x '()) 
(define y '(( 1 2 3 4 )( 4 5 6 7 )( 7 8 9 0 )))
(stuff x y) 

Кажется, что это работает, если вы посмотрите на операторы отладки

1 Ответ

2 голосов
/ 03 марта 2011

Вы не можете написать два if выражения подряд, как вы делаете;Поскольку if является выражением, оно оценит первое ((if (null? y) 0)), откажется от ответа (поскольку вы его нигде не используете), а затем запустите второе (которое вернет неопределенное значение, если (car y)пустой).Кроме того, что произойдет, если y не пусто, но его первый элемент пуст?Этот случай не обрабатывается.Как правило, в Scheme вы используете cond для замены цепочки if-elseif-else в других языках.Что конкретно терпит неудачу иначе?Я думаю, ваш код будет работать или почти работать, если вы исправите проблему if и обработаете другой случай, который я упомянул.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...