Схема: заявка, а не процедура - PullRequest
1 голос
/ 19 января 2020

Я огляделся, и другой ответ об обмене стека сказал, что я обертываю что-то круглыми скобками, чего не следует делать, так как это вызывает значение как функцию. Я не могу найти, где в моем cond это происходит. Вот ошибочная процедура

(define insert_labels (lambda (l)(
  ;; if the car is null, return empty list


  (cond 
   ;; if the next element is null, append and break
   [(null? l) ""]

   ;; Before it was recurring to the null pointer and adding the car of that to
   ;; my hash table. This was my attempt to try and stop that but now i'm getting
   ;; my current error
   [(eq? (cdr l) '()) 0]

   ;; if the car of the list is of type other, append the cadr and recur
   [(eq? (what-kind (car l)) 'other) (hash-set! label_hash (car l) (cadr l)) (insert_labels (cdr l))]

   ;; else, recur
   [else (insert_labels (cdr l))]
   )
  )
  )
)

Появляется ошибка, потому что я пытаюсь остановить повторение моей процедуры после нулевого указателя. Но теперь это дает мне текущую ошибку. В других местах упоминается, что он выдает эту ошибку, потому что я использую () для вызова вызова функции, но я не вижу, как в этой строке это вызвало бы это, разве это не просто формат cond?

1 Ответ

3 голосов
/ 19 января 2020

Смотрите прямо за пределами cond:

(lambda (l)(
  ;; if the car is null, return empty list


  (cond 

Значение, возвращаемое cond, применяется как функция из-за (.

Измените его на:

(lambda (l)
  ;; if the car is null, return empty list


  (cond 
...