Как объявить переменную внутри процедуры в Scheme: define: недопустимо в контексте выражения - PullRequest
0 голосов
/ 18 октября 2018

Я программист C #, изучающий Scheme, и у меня много проблем, потому что я не понимаю Scheme.

Я написал этот код с большой помощью:

#lang racket

(define sort-asc-by-second
  (lambda (lst)
    (sort lst
          (lambda (x y) (< (cdr x) (cdr y))))))

(define sum
  (lambda (lst)
    (apply + (map cdr lst))
  )
)

(define my-function
  (lambda (lst)
   (
    (define sorted (sort-asc-by-second lst))
    (define suma (sum lst))
    (define lista (map (lambda (p) (cons (car p) (/ (cdr p) suma)))))
   ))
)

Но я получаю следующую ошибку:

define: недопустимо в контексте выражения в: (определить отсортировано (sort-asc-by-second lst))

В этой строке:

(define sorted (sort-asc-by-second lst))

Как мне объявить переменную?Возможно, проблема в том, что я программист на C # и не понимаю Scheme.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я думаю, вам будет очень важно выполнить шаги Design Recipe .В этом случае:

  • написать подпись: типы, которые принимает и возвращает функция.
  • Записать контрольные примеры, используя check-equal ?.
  • Следуйте шаблону для выбранных вами данных.

Поместите иначе (и, возможно, немного более резко): прекратите бродить.Начните проектировать!

0 голосов
/ 18 октября 2018

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

(define my-function
  (lambda (lst)

    (define sorted (sort-asc-by-second lst))
    (define suma (sum lst))
    (define lista (map (lambda (p) (cons (car p) (/ (cdr p) suma)))))
    )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...