2016-06-13 3 views
2

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

guile << __EOF__ 

(define heading-list (list 'a 'b 'c) 
) 

(define (make-heading-list) 
    (let* ((mycond #t)) 
    (if mycond 
     (set! 
      heading-list 
      (append (
       heading-list 
       (list 'd) 
      ) 
      ) 
     ) 
     (display 'false) 
    ) 
    heading-list 
) 
) 

(make-heading-list) 
__EOF__ 

Когда я запускаю это, я получаю:

ERROR: In procedure setter: 
ERROR: In procedure setter: Wrong type argument in position 1: (a b c) 

Я знаю, что форматирование не является станд - Я починю его, когда он работает.

EDIT ----------------------------------------- Работает код (надеюсь, разумно отформатирован сейчас):

guile << __EOF__ 

(define heading-list (list 'a 'b 'c)) 

(define (make-heading-list) 
    (let* ((mycond #t)) 
     (if mycond 
      (set! 
       heading-list 
       (append heading-list (list 'd))) 
      (display 'false)) 
     heading-list)) 

(make-heading-list) 
__EOF__ 
+0

У вас есть дополнительный набор парсенов вокруг 'heading-list' в обоих местах. Не пиши свои парны; это затрудняет выявление таких проблем. Кроме того, в целом ваш код кажется странным в нескольких местах ... зачем связывать 'mycond' с' # t', а затем входить в него? Почему 'set!' Вместо того, чтобы просто возвращать список? –

+0

Привет, Алексис. Спасибо за вашу помощь. Я удалил parens вокруг обоих заголовков в списке make-heading. Теперь получаем: «ОШИБКА: В процедуре (a b c): ОШИБКА: неправильный тип для применения: (a b c)« Я использую mycond, потому что это упрощенный тест того, что я действительно хочу сделать, и я хотел проверить if. Я использую набор! потому что я не мог заставить ничего работать. Предложения приветствуются - особенно пример кода! –

+0

Не могли бы вы обновить свой вопрос с помощью обновленного кода? Думаю, это было бы полезно. –

ответ

2

heading-list список. Вы используете его, как если бы это была процедура. (heading-list) означает «применить процедуру heading-list к нулевым аргументам». Следовательно, появляется сообщение об ошибке «неправильный тип для применения».

+0

Привет, Майкл, я попытался удалить парсеры, но получить другую ошибку - см. Комментарий выше. Я понимаю, что вы говорите, но я не знаю, как исправить ... –

+0

Вы по-прежнему используете 'heading-list' в качестве процедуры в' append'. Он должен быть '(append heading-list (list 'd))'. –

+0

Майкл, теперь работаю спасибо! И я думаю, что понимаю, почему. Кажется, сейчас так просто ... –

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