2009-10-16 1 views
3

Мне нужно создать подфункцию, которая вернет мне весь соседний узел, который мне нужен для this question в Схеме. Я новичок в схеме, не знаю, как я могу объединить два условия в один тестовый пример?Схема Как проверить 2 условия в одном пункте?

В основном мой алгоритм должен проверить, находится ли узел на краю или нет. В этом случае я использую сетку 5x5.

Если оба узла находятся на углу, то оба равны либо 1, либо 5, чем у меня будет только 2 соседних узла. Если только один из узлов попал в край, у меня будет 3 возвращаемое значение узла. Если нет края вокруг узла, у меня будет 4 возврата узла.

Моя проблема заключается в том, как я могу поставить 2 тестовых примера в один пункт?

(define (neighbors l w) 
    (if (= 1 l) and (= 1 w) 
     (display l w))) --at top left corner 

Здесь я хочу, чтобы оценить, если л и ш оба равны 1. Теперь это не работает, потому что я не могу использовать «и» «или» такие ключевые слова в синтаксисе, ни я могу использовать & или +, чтобы объединить их. Есть идеи ? Или я должен сделать что-то еще?

+0

Обратите внимание, что отображение не принимает двух целых аргументов. Для получения нужного результата код должен быть: (дисплей l) (дисплей # \ пробел) (дисплей w) –

ответ

7

Вы пробовали это:

(define (neighbors l w) 
    (if (and (= 1 l) (= 1 w)) 
    (display l w))) --at top left corner 

Потому что, когда я смотрю на this, кажется, работает именно так

+0

правый !! благодаря! работает, и я должен использовать то же самое для отображения, как и – Jonathan

3

когда и если не более удобны, чем если, когда относится только к одной ветке к условному:

(define (neighbors l w) 
    (when (and (= 1 l) (= 1 w)) 
    (display l) 
    (display #\space) 
    (display w) 
    (newline))) 

Обратите внимание, что, когда ветвь «ы неявного начинает, в то время как, если требует явного начинает, если любой из его ветвей имеет более чем одну формы.

Не все схемы имеют когда и если заранее сконфигурированные как они не указаны в R5RS. Их легко определить как макросы:

(define-syntax when 
    (syntax-rules() 
    ((_ test expr1 expr2 ...) 
     (if test 
     (begin 
     expr1 
     expr2 ...))))) 

(define-syntax unless 
    (syntax-rules() 
    ((_ test expr1 expr2 ...) 
    (if (not test) 
    (begin 
     expr1 
     expr2 ...))))) 
+0

мм, мне кажется, что «когда» является недопустимым ссылочным идентификатором. Это не встроенная функция схемы построения в моей библиотеке :( – Jonathan

+0

@FS. Тривиально добавлять «когда» и «если», если ваша схема не имеет их. См. Измененный ответ. –

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