Правильный синтаксис let
:
(let ([binding expression]
[binding2 expression2]
...)
body ...)
Если бы вы правильно отформатировали его, вы бы увидели, что вместо binding2
у вас есть (arr2 (get-list name2 arrs))
без выражения.Сообщение об ошибке указывает на отсутствие привязки arr2
.Поэтому я правильно отформатирую ваш код:
(define (similarity-arrays name1 name2 arrs result)
(let ([arr1 (get-list name1 arrs)]
[(arr2 (get-list name2 arrs))])
(if (= (length arr1)(length arr2))
(let ([x1 (car arr1)]
[x2 (car arr2)])
(if (= 0 (length arr1))
result
(similarity-arrays
(cdr arr1)
(cdr arr2)
(+ result (- (car arr1)(car arr2))))))
#f)))
Теперь от R6RS нет различия между ()
и []
.Они имеют в виду то же самое.Разница лишь в том, что ошибки легче обнаружить.Вы заметили это?
Во многих реализациях я уверен, что вы получите ошибки во время компиляции.Например.Racket пометил это как неправильный синтаксис перед запуском, просто нажав «проверить синтаксис».