Первая ракетка: Главная — Первая ракетка

Главная — Первая ракетка

Спортивный комплекс площадью 1021 м2 открыл свои двери 3 сентября 2015 г.
Это специализированный центр для проведения тренировок, сборов и соревнований по настольному теннису, который получил сертификат соответствия  требованиям безопасности, как Арена для игровых видов спорта категории “А” и включен во Всероссийский  реестр объектов спорта.

Основные характеристики центра:

  • два зала рассчитаны на 10 и 4 стола для настольного тенниса, а  также трансформируется в  универсальную площадку для проведения соревнований по волейболу, всем видам единоборств, турниров по шахматам, спортивных праздников и пр..
  • специализированное напольное покрытие
  • освещение в игровой зоне 850 Люкс
  • профессиональный тренерский состав
  • зал оборудован приточно-вытяжной вентиляцией, системой кондиционирования
  • профессиональное звуковое оповещение в зале и др. помещениях
  • тренерские и судейские комнаты
  • тренажерный зал
  • 2 раздевалки с душевыми и туалетными комнатами
  • большое удобное помещение для отдыха и приема пищи
  • ресепшн с гардеробом, мягкой зоной

В нашем центре практикуется индивидуальный подход к каждому клиенту.

Преимущества настольного тенниса

Основное преимущество — это доступность практически для всех, обусловленная отсутствием необходимости приобретения дорогостоящего инвентаря и экипировки. В процессе игры в настольный теннис приходится совершать множество ударов с высокой скоростью. Постоянно занимаясь, организм вырабатывает выносливость и начинает легче переносить физические нагрузки. Занятия настольным теннисом приносят удовольствие и радость. Хотя, в процессе игры вы и испытываете стресс, но он быстро исчезает под влиянием положительных эмоций от игры и от физической нагрузки. Это тренирует ваше сердце и нервную систему, происходит равномерная эмоциональная и физическая тренировка.

Польза для здоровья

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

Благодаря развитию реакций, мозг учится ещё быстрее управлять телом. Играя в настольный теннис, вы развиваете тазобедренный, лучезапястный, локтевой и плечевой суставы и даже сочленения позвоночника. Есть такая фраза «Человек здоров, пока его позвоночник остаётся гибким». Это ещё одна из причин, почему настольный теннис положительно влияет и укрепляет наше здоровье.

Противопоказания при занятиях настольным теннисом

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

Экипировка

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

Приходите! Мы всегда рады новым лицам в нашей команде!

Главная — Первая ракетка

Спортивный комплекс площадью 1021 м2 открыл свои двери 3 сентября 2015 г.
Это специализированный центр для проведения тренировок, сборов и соревнований по настольному теннису, который получил сертификат соответствия  требованиям безопасности, как Арена для игровых видов спорта категории “А” и включен во Всероссийский  реестр объектов спорта.

Основные характеристики центра:

  • два зала рассчитаны на 10 и 4 стола для настольного тенниса, а  также трансформируется в  универсальную площадку для проведения соревнований по волейболу, всем видам единоборств, турниров по шахматам, спортивных праздников и пр..
  • специализированное напольное покрытие
  • освещение в игровой зоне 850 Люкс
  • профессиональный тренерский состав
  • зал оборудован приточно-вытяжной вентиляцией, системой кондиционирования
  • профессиональное звуковое оповещение в зале и др. помещениях
  • тренерские и судейские комнаты
  • тренажерный зал
  • 2 раздевалки с душевыми и туалетными комнатами
  • большое удобное помещение для отдыха и приема пищи
  • ресепшн с гардеробом, мягкой зоной

В нашем центре практикуется индивидуальный подход к каждому клиенту.

Преимущества настольного тенниса

Основное преимущество — это доступность практически для всех, обусловленная отсутствием необходимости приобретения дорогостоящего инвентаря и экипировки. В процессе игры в настольный теннис приходится совершать множество ударов с высокой скоростью. Постоянно занимаясь, организм вырабатывает выносливость и начинает легче переносить физические нагрузки. Занятия настольным теннисом приносят удовольствие и радость. Хотя, в процессе игры вы и испытываете стресс, но он быстро исчезает под влиянием положительных эмоций от игры и от физической нагрузки. Это тренирует ваше сердце и нервную систему, происходит равномерная эмоциональная и физическая тренировка.

Польза для здоровья

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

Благодаря развитию реакций, мозг учится ещё быстрее управлять телом. Играя в настольный теннис, вы развиваете тазобедренный, лучезапястный, локтевой и плечевой суставы и даже сочленения позвоночника. Есть такая фраза «Человек здоров, пока его позвоночник остаётся гибким». Это ещё одна из причин, почему настольный теннис положительно влияет и укрепляет наше здоровье.

Противопоказания при занятиях настольным теннисом

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

Экипировка

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

Приходите! Мы всегда рады новым лицам в нашей команде!

Beautiful Racket: Списки

Beautiful Racket / объяснения

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

() ; пустой список
(1 2 3) ; три числа
(«а» «б» «в» «г»); четыре строки
(1 2 3 («a» «b» «c» (4 5 6))) ; список с подсписками

 1
2
3
4 
 () ; пустой список
(1 2 3) ; три числа
("а" "б" "в" "г"); четыре струны
(1 2 3 ("а" "б" "в" (4 5 6))) ; список с подсписками
 

Обозначение списка

Каждый раз, когда вы заключаете значения в круглые скобки, вы составляете список. По умолчанию квадратные и фигурные скобки работают так же, как и круглые, поэтому эти списки одинаковы:

(1 2 3 («a» «b» «c» (4 5 6)))
[1 2 3 [ «а» «б» «в» [4 5 6]]]
{1 2 3 [«а» «б» «в» (4 5 6)]}

 (1 2 3 ("а" "б" "в" (4 5 6)))
[1 2 3 ["а" "б" "в" [4 5 6]]]
{1 2 3 ["а" "б" "в" (4 5 6)]}
 

На практике круглые скобки предпочтительнее, а квадратные и фигурные скобки зарезервированы для особых ситуаций, когда они улучшают читабельность, например, переменные, введенные в верхней части let:

(let ([x 42]
      [ у 58])
  (* x у))

 (пусть ([x 42]
      [г 58])
  (* х у))
 

Если вы наберете список в программе Racket, по умолчанию он будет интерпретирован как Racket code:

(* 42 58) ; печатает 2436
(1 2 3) ; ошибка: 1 не является функцией
() ; ошибка: отсутствует процедура
(a b c) ; ошибка: `a` не определено

 1
2
3
4 
 (* 42 58) ; отпечатки 2436
(1 2 3) ; ошибка: 1 не является функцией
() ; ошибка: отсутствует процедура
(а б в) ; ошибка: `a` не определен
 

Чтобы составить список значений, которые будут оцениваться как данные, а не код, используйте функцию списка:

(список * 42 58) ; печатает ‘(#<процедура:*> 42 58)
(список 1 2 3) ; печатает ‘(1 2 3)
(список) ; печатает ‘()
(список a b c) ; ошибка: `a` не определено

 1
2
3
4 
 (список * 42 58) ; печатает '(#<процедура:*> 42 58)
(список 1 2 3) ; печатает '(1 2 3)
(список)          ; печатает '()
(список а б в) ; ошибка: `a` не определен
 

В качестве альтернативы вы можете создать особый вид списка с кавычками, который называется datum . цитата может использоваться как функция. Но идиоматический способ его использования — добавление префикса ‘ к любому выражению. Ниже некоторые данные сделаны с кавычками, а справа — эквивалентное обозначение списка:

(кавычка (* 42 58) ); (список ‘* ’42 ’58)
‘(* 42 58) ; (список ‘* ’42 ’58)
‘(1 2 3) ; (список ‘1 ‘2 ‘3)
‘() ; (список)
‘(а б в) ; (список ‘а’б’в)

 1
2
3
4
5 
 (кавычка (*42 58)) ; (список '*'42'58)
'(* 42 58) ; (список '*'42'58)
'(1 2 3) ; (список '1 '2 '3)
'() ; (список)
'(а б в) ; (список 'а'б'в)
 

Предупреждение: в зависимости от ввода список и цитата могут создавать или не создавать один и тот же выходной список. Например, Racket считает числа, строки и логические значения «самоцитирующими» — это означает, что они уже находятся в форме данных — поэтому они не изменяются кавычками. Для этих значений список и цитата (и их эквивалент, префикс ‘) могут использоваться взаимозаменяемо:

(равно? (список 1 2 3) ‘(1 2 3)) ; true
(равно? (список «a» «b» #t) ‘(«a» «b» #t)) ; true

 (равно? (список 1 2 3) '(1 2 3)) ; истинный
(равно? (список "a" "b" #t) '("a" "b" #t)) ; истинный
 

Но другие значения, такие как переменные и выражения, не заключаются в кавычки, поэтому list и quote дают разные результаты:

(list + (* 6 7)); список из одной функции и одного числа
‘(+ (* 6 7)) ; список символов и цифр
(список ‘+’ (* 6 7)) ; также список символов и цифр
(равно? (список + (* 6 7)) (список + 42)) ; true
(равно? (список + (* 6 7)) ‘(+ (* 6 7))) ; false
(равно? (список ‘+’ (* 6 7)) ‘(+ (* 6 7))) ; правда

 1
2
3
4
5
6 
 (список + (* 6 7)) ; список из одной функции и одного числа
'(+ (* 6 7)) ; список символов и цифр
(список '+'(* 6 7)) ; также список символов и цифр
(равно? (список + (* 6 7)) (список + 42)) ; истинный
(равно? (список + (* 6 7)) '(+ (* 6 7))) ; ЛОЖЬ
(равно? (список '+' (* 6 7)) '(+ (* 6 7))) ; истинный
 

Когда вы используете список, подвыражение типа (* 6 7) сначала оценивается как 42, прежде чем оно будет помещено в список. Но когда вы используете цитату, это подвыражение просто обрабатывается как подсписок данных.

Для новичков в Racket список, как правило, менее запутанный выбор. Позже вы оцените сокращение ‘ при вводе длинных списков самоцитирующихся значений. Эти два списка одинаковы:

(список 1 2 3 (список (список ‘a ‘b’c) 4 5 6))
‘(1 2 3 ((a b c) 4 5 6)) ; цитата применяется к каждому элементу

 (список 1 2 3 (список (список 'а'б'в) 4 5 6))
'(1 2 3 ((a b c) 4 5 6)) ; цитата применяется к каждому элементу
 

Переменная, содержащая список, часто имеет окончание во множественном числе (например, s) для обозначения нескольких значений. Следуя этой идее, переменная, содержащая список списков, может быть названа с окончанием двойного множественного числа (хотя тройное- может подталкивать его):

(define int 42)
(define ints ‘(41 42 43 44 45) )
(определить intss ‘((41 42 43) (44 45 46)))

 (определить целое число 42)
(определить целые числа '(41 42 43 44 45))
(определить intss '((41 42 43) (44 45 46)))
 

Печать списков

Racket печатает списки, используя начальные кавычки ‘, за которыми следует простейшее текстовое представление каждого значения.

Самоцитирующиеся значения печатаются так же, как они печатаются, поэтому эти списки:

(список 1 2 3 (список (список ‘a ‘b’c) «d» «e» «f»))
‘(1 2 3 ((a b c) «d» «e» «f»))

 (список 1 2 3 (список (список 'a'b'c) "d" "e" "f"))
'(1 2 3 ((a b c) "d" "e" "f"))
 

Печатаются так:

‘(1 2 3 ((a b c) «d» «e» «f»))
‘(1 2 3 ((a b c) «d» «e» «f «))

 '(1 2 3 ((а б в) "г" "д" "е"))
'(1 2 3 ((a b c) "d" "e" "f"))
 

Способ печати списка зависит не от того, как он составлен, а только от того, что в нем содержится. Несмотря на то, что в первом списке используется список, а во втором — кавычки, они печатаются одинаково.

Кроме того, распечатанный список значений с внутренними кавычками идентичен форме списка с префиксом ‘-, поэтому вы можете скопировать этот вывод и вставить его обратно в программу в виде кода.

Напротив, значения в списке, которые не являются самоцитируемыми:

(список + расширение)

 (список + расширение)
 

Будет напечатано с текстовым приближением:

‘(# #)

 '(#<процедура:+> #<процедура:экспр>)
 

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

‘(# # <процедура:выражение>) ; ошибка: неверный синтаксис

 '(# #) ; ошибка: неправильный синтаксис
 

Списки со смесью самоцитирующих значений и других печатаются соответственно:

(список 1 2 (список «а» «б») +)
(список 1 2 ‘(«а» «б») +)

 (список 1 2 (список "а" "б") +)
(список 1 2 '("а" "б") +)
 

‘(1 2 («a» «b») #<процедура:+>)
‘(1 2 («a» «b») #<процедура:+>)

 '(1 2 ("а" "б") #<процедура:+>)
'(1 2 ("a" "b") #<процедура:+>)
 

Наконец, имейте в виду, что начальные кавычки в печатном списке и круглые скобки, ограничивающие его края, не являются неотъемлемой частью списка, так же как кавычки, напечатанные «вокруг строки», или начальный нуль напечатано для числа вроде 0,1234. Это просто обозначения, используемые при преобразовании этих значений в текст. В DrRacket вы можете изменить способ печати списков с помощью Язык → Выбрать язык … → Стиль вывода .

Квазицитата

Между списком и цитатой стоит квазицитата. Как следует из названия, по умолчанию он работает как кавычка, но также позволяет интерполировать выражения, вычисляемые обычным образом (как это было бы со списком).

Подобно кавычке, хотя квазицитата может быть вызвана как функция, она чаще обозначается префиксом, на этот раз обратной кавычкой `. Чтобы интерполировать одно значение, используйте unquote, который обычно записывается как префикс запятой, за которым следует выражение:

(определить x 42)
‘(41 x 43) ; печатает ‘(41 x 43)
`(41 ,x 43) ; отпечатки ‘(41 42 43)

 (определить x 42)
'(41 х 43) ; отпечатки '(41 х 43)
`(41 ,x 43) ; отпечатки '(41 42 43)
 

Чтобы интерполировать список из нескольких значений, используйте сращивание без кавычек, которое обычно записывается в виде запятой, за которой следует знак @, за которым следует переменная. Функция объединения без кавычек объединяет подсписок с окружающим списком:

(определить xs (список 42 43 44))
`(41 ,@xs 45) ; печатает ‘(41 42 43 44 45)

 (определить xs (список 42 43 44))
`(41 ,@xs 45) ; отпечатки '(41 42 43 44 45)
 

Если вы используете unquote с подсписком, подсписок останется вложенным:

(define xs (list 42 43 44))
`(41 ,xs 45) ; печатает ‘(41 (42 43 44) 45)

 (определить xs (список 42 43 44))
`(41,xs 45) ; отпечатки '(41 (42 43 44) 45)
 

Основные функции списка

Списки используются в Racket повсеместно, поэтому многие функции используют или создают списки. Некоторые из них стоит запомнить, потому что они очень распространены.

список?: проверить, является ли что-то списком.

(список? ‘()) ; #t
(список? ‘(1 2 3) ); #t
(список? 123) ; #f

 (список? '()) ; #т
(список? '(1 2 3)) ; #т
(список? 123) ; #ф
 

empty?: проверить, является ли что-то пустым списком (эквивалентно null?).

(пусто? ‘()) ; #t
(пусто? ‘(1 2 3)) ; #f
(пусто? 123) ; #f

 (пусто? '()) ; #т
(пусто? '(1 2 3)) ; #ф
(пусто? 123) ; #ф
 

длина: получить количество элементов в списке.

(длина ‘()) ; 0
(длина ‘(1 2 3)) ; 3

 (длина '()) ; 0
(длина '(1 2 3)) ; 3
 

flatten: объединение вложенных подсписков в один список. + Плюсы CS: «squish» = предварительный обход в глубину.

(сплющить ‘(1 (2 3 (4 5 (6) 7) 8 9))) ; ‘(1 2 3 4 5 6 7 8 9)

 (сгладить '(1 (2 3 (4 5 (6) 7) 8 9))) ; '(1 2 3 4 5 6 7 8 9)
 

применить: добавить список значений к списку аргументов для функции.

(+ 1 2 3 4 5 6 7 8 9) ; 45
(применить + ‘(1 2 3 4 5 6 7 8 9)) ; 45
(применить + 1 2 3 4 5 ‘(6 7 8 9)) ; 45

 (+ 1 2 3 4 5 6 7 8 9) ; 45
(применить + '(1 2 3 4 5 6 7 8 9)) ; 45
(применить + 1 2 3 4 5 '(6 7 8 9)) ; 45
 

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

(карта абс (список -1 2 -3 4) ); ‘(1 2 3 4)
(карта + ‘(1 2 3 4)’ (10 20 30 40)) ; ‘(11 22 33 44)

 (карта абс (список -1 2 -3 4)) ; '(1 2 3 4)
(карта + '(1 2 3 4) '(10 20 30 40)) ; '(11 22 33 44)
 

для каждого: как карта, применить функцию к каждому значению списка; в отличие от карты игнорируйте возвращаемые значения. Это удобно, когда функция используется для побочного эффекта, а не для возвращаемого значения.

(для каждого дисплея (список -1 2 -3 4))

 (для каждого дисплея (список -1 2 -3 4))
 

фильтр: берет значения из списка, соответствующие функции предиката, и отбрасывает остальные. Самый распространенный способ сокращения списка.

(фильтр нечетный? ‘(1 2 3 4 5 6 7 8 9)) ; ‘(1 3 5 7 9)

 (фильтр нечетный? '(1 2 3 4 5 6 7 8 9)) ; '(1 3 5 7 9)
 

минусы: вставить значение в начало списка.

(минус 1 ‘(2 3 4)) ; ‘(1 2 3 4)

 (минус 1 '(2 3 4)) ; '(1 2 3 4)
 

добавить: объединить несколько списков в один список.

(добавить ‘(1 2 3)’ (4 5 6) ‘(7 8 9)) ; ‘(1 2 3 4 5 6 7 8 9)

 (добавить '(1 2 3) '(4 5 6) '(7 8 9)) ; '(1 2 3 4 5 6 7 8 9)
 

автомобиль или первый: получить первое значение списка.

(автомобиль ‘(1 2 3 4)) ; 1
(первый ‘(1 2 3 4)) ; 1

 (автомобиль '(1 2 3 4)) ; 1
(первый '(1 2 3 4)) ; 1
 

cdr или остальные: получить конец списка после первого значения, которое всегда является списком (хотя, возможно, пустым).

(cdr ‘(1 2 3 4)) ; ‘(2 3 4)
(остальное ‘(1 2 3 4)) ; ‘(2 3 4)
(cdr ‘(один элемент)) ; ‘()

 (cdr '(1 2 3 4)) ; '(2 3 4)
(остальное '(1 2 3 4)) ; '(2 3 4)
(cdr '(один элемент)) ; '()
 

car и cdr обратны cons, поэтому это тождество верно для каждого непустого списка:

(равно? (cons (car my-list) (cdr my-list)) my-list)

 (равно? (минусы (автомобиль мой-список) (cdr мой-список)) мой-список)
 

О происхождении этих трех функций со странными именами см. в разделе Pairs. Диапазон

: составить список номеров.

(диапазон 6) ; ‘(0 1 2 3 4 5)
(диапазон 1 6) ; ‘(1 2 3 4 5)
(диапазон 1,5 6) ; ‘(1,5 2,5 3,5 4,5 5,5)
(диапазон 0 6 2) ; ‘(0 2 4)
(диапазон 0 3 0,5) ; ‘(0 0,5 1,0 1,5 2,0 2,5)

 1
2
3
4
5 
 (диапазон 6) ; '(0 1 2 3 4 5)
(диапазон 1 6) ; '(1 2 3 4 5)
(диапазон 1,5 6) ; '(1,5 2,5 3,5 4,5 5,5)
(диапазон 0 6 2) ; '(0 2 4)
(диапазон 0 3 0,5) ; '(0 0,5 1,0 1,5 2,0 2,5)
 

Рекурсия

Как структура данных, списки хорошо взаимодействуют с рекурсивными функциями, которые последовательно потребляют элементы списка. Идея состоит в том, что на каждом проходе функция преобразует только первый элемент списка и рекурсивно работает с остальными, пока он не станет пустым, а результаты снова собираются в список с минусами:

(определить (квадрат x) (expt x 2))

(определить (квадрат xs)
  (if (пусто? xs)
      пусто
      (cons (квадрат (первый xs)) (квадрат (остальные xs)) ))

(квадрат ‘(1 2 3 4 5)) ; ‘(1 4 9 16 25)

 1
2
3
4
5
6
7
8 
 (определение (квадрат x) (expt x 2))
(определить (квадрат xs)
  (если (пусто? хз)
      пустой
      (минусы (квадратный (первый хз)) (квадратнее (остальные хз)))))
(квадрат '(1 2 3 4 5)) ; '(1 4 9 16 25)
 

Функции списка, такие как карта и фильтр, предлагают интерфейс более высокого уровня для той же логики рекурсии.

(определить (квадрат x) (expt x 2))
(карта квадрата ‘(1 2 3 4 5)) ; ‘(1 4 9 16 25)

 (определить (квадрат x) (expt x 2))
(квадрат карты '(1 2 3 4 5)) ; '(1 4 9 16 25)
 

См. также рекурсию.

Случайный доступ

Поскольку списки состоят из связанных пар, они оптимизированы для последовательного доступа, а не произвольного доступа. Хотя вы можете использовать list-ref для извлечения произвольного элемента из списка, он работает, начиная с начала списка и переходя к запрошенному элементу. Для небольших списков это не имеет большого значения. Для больших списков это может быть медленным. В этот момент, вероятно, вы будете счастливее с вектором. См. структуры данных.

Далее

длина списка в ракетке

Вот как я систематически сделал бы функцию для нахождения длины списка.

Окончательный результат будет

 ;; длина: [Элемент списка] -> Число
;; Производит количество элементов в списке
(определить (длина lst)
  (состояние
    [(пусто? список) 0]
    [(минусы? lst) (+ 1 (длина (остальные lst)))]))
 

Но более важным является систематический процесс, который вы можете использовать для написания многих других программ. Процесс, который я использую здесь, это Design Recipe объясняется в книге How to Design Programs.

1: Что такое список?

Список либо пуст, либо представляет собой комбинацию первого элемента с остальными элементами. Этот «отдых» — еще один список.

В Racket «пусто» записывается как '() , а «объединение» для списков записывается как cons .

 [Элемент списка] является одним из:
 - '()
 - (Элемент минусов [Элемент списка])
 

Некоторые примеры списков:

'() ; пустой
(минусы "Я один" '()) ; один элемент "Я один"
(минусы "Здравствуйте" (минусы "там" '())) ; два элемента "Здравствуйте" и "там"
(против 1 (против 3 (против 5 (против 7 (против 9 '()))))) ; пять элементов, нечетные числа
 

2: Что делает длина

?

Функция length принимает список и возвращает число, представляющее количество элементов в списке. Пустой список длиной 0 , а приведенные выше примеры должны иметь длины 0 , 1 , 2 и 5 .

 ;; длина: [Элемент списка] -> Число
;; Производит количество элементов в списке
;; (длина '()) = 0
;; (длина (минусы "Я один" '())) = 1
;; (длина (минусы "Здравствуйте" (минусы "там" '()))) = 2
;; (против 1 (против 3 (против 5 (против 7 (против 9'()))))) = 5
(определить (длина lst)
  ???)
 

3: Какие падежи указаны в определении?

Список либо пуст, либо содержит минусы. Чтобы проверить, является ли он пустым, мы можем использовать cond с вопросом (пусто? lst) для пустого случая и вопросом (cons? lst) для случая минусов.

 (определить (длина lst)
  (состояние
    [(пусто? lst) ???]
    [(минус?лст)???]))
 

4: Какие «части» данных доступны в каждом случае?

Пустой список не имеет подразделов.

Тем не менее, (Элемент минусов [Элемент списка]) состоит из двух частей:

  • первая вещь, Элемент ,
  • и остальной список, [Listof Element] .

Чтобы получить их в ракетке, вы можете использовать первый и остальные соответственно.

 (определить (длина lst)
  (состояние
    [(пусто? lst) ???]
    [(против? lst) ... (первый lst) ... (остальные lst) ...]))
 

5: Являются ли какие-либо из этих частей сложными данными?

(первый номер) просто Элемент . Для целей длины это не сложно, и нам не нужно его обрабатывать дальше.

Однако (остальные элементы) — это еще один [Элемент списка] , и это сложно. Как мы справляемся с этим? С помощью вспомогательной функции.

В этом случае нам нужна вспомогательная функция, связанная с длиной и принимающая [Listof Element] в качестве аргумента. В этом случае эта вспомогательная функция имеет длину , функция мы в настоящее время определяет ! Мы можем использовать его рекурсивно на (оставшийся первый) , потому что это меньшая часть.