LINUX.ORG.RU

Подскажите где ошибка в коде Scheme

 


0

1

Только начала изучать Ским. Подскажите пожалуйста где ошибка: я пишу функцию которая берет предложение и ищет в нем знак «=» если найдет то предложение до знака равно это будет Термин а после знака равно это Определение, я написала функцию а компилятор ругается говорит что плохой синтаксис вот тут:

(let((i 1)(j length expr)))(let((k length expr)(expr2 expr)))

(define termAndDefinition
(lambda (expr)
   (let((i 1)(j length expr))) 
     (let((k length expr)(expr2 expr)))
      (if(equal? "=" (substring expr (- k i) j))
       (let(term substring expr 0 (- k 1))
         (definition substring expr2 (+ k 1))) 
           (termAndDefinition (substring expr 0 k)))))


Последнее исправление: beastie (всего исправлений: 1)

а в scheme аналога split'a нету?

p.s. my ($термин, $определение) = split('=', $предложение);

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
(define (parse s i)
  (if (equal? (string-ref s i) #\=)
      (list (substring s 0 i) (substring s (+ i 1)))
      (parse s (+ i 1))))

Ским не знаю, если что.

anonymous
()

Добавь скобочек, поможет.

crowbar
()

Сидел себе человек спокойно, никого не трогал, на форум писал:

Только начала изучать Ским. Подскажите пожалуйста где ошибка: я пишу функцию которая берет предложение...

А потом так бац в окно залетает иноплянетянин-психопат, закидывает автора в летающую тарелку, и напоследок, в припадке нервного истерического смеха, строчит угрожающее послание землянам:

(let((i 1)(j length expr)))(let((k length expr)(expr2 expr)))
(define termAndDefinition (lambda (expr) (let((i 1)(j length expr))) (let((k length expr)(expr2 expr))) (if(equal? «=» (substring expr (- k i) j)) (let(term substring expr 0 (- k 1)) (definition substring expr2 (+ k 1))) (termAndDefinition (substring expr 0 k)))))

anonymous
()

Кроме схемы, не забываем ещё учить lorcode. ;)

beastie ★★★★★
()
Ответ на: комментарий от anonymous

Вот эта тварь похитила ТСа!

Правительство Российской Федерации уже объявило вознаграждение за поимку нечисти в размере 4000 рублей!

anonymous
()

(let((i 1)(j length expr))) ...

Наверное, всё-таки (let ((i 1) (j (length expr))) ...

Иначе у тебя даже скобки не сходятся (на строке поровну открывающих и закрывающих, но следующая с отступа)

monk ★★★★★
()

С правильными инструментами пропущенная скобка должна быть очень очевидна. Может поменять <ваша среда разработки> на emacs?

Gentooshnik ★★★★★
()
Ответ на: комментарий от anonymous

У него тут уже трое виртуалов. Пора банить!

anonymous
()
Ответ на: комментарий от anonymous

Вообще, упоротое стремление писасать:

(define termAndDefinition
(lambda (expr)

является неплохим маркером.

ugoday ★★★★★
()
Последнее исправление: ugoday (всего исправлений: 1)

(let((k length expr)(expr2 expr)))

(let ((k (length expr))
      (expr2 expr))

и так далее... код, если честно, ужасен, тебе бы сначала посмотреть какую-нибудь книжку типа СИКП

pseudo-cat ★★★
()
Последнее исправление: pseudo-cat (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.