Pull to refresh

Comments 5

В разделе про for/while аргументы 2 и 3 вызывают сомнения:


  1. Какая либо конструкция не может быть лучше другой из-за сложности её написания.
  2. Какая либо конструкция не может быть лучше другой из-за того, что она часто встречается в литературе.

Было бы интересно почитать про обучение циклам на Haskell.

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


Про литературу на самом деле сложно оценить. Думаю вы правы, в том, что это слабый аргумент. Впрочем есть два других аргумента.


Haskell преподавать не приходилось, спрос отсутствует, материалы надо готовить и прорешивать. На первый взгляд, там циклы вообще не применяются. Операции над множествами сводятся к map, reduce и т.п.

доброе время суток! классная статья! тема раскрыта легко и понятно. Спасибо!
Здравствуйте! Статья действительно хороша для выявления недостатков в объяснении тем с нуля, сам делал подобные ошибки, пытаясь знакомых учить основам программирования.

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

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

Текст задачи:
Пользователь вводит число Х. Вывести в столбик числа от 0 до 9 и поставить знак '+' напротив того числа, которое равно Х.

Исходный код для решения задачи на языке Arc (краткий до невозможности диалект Lisp), как на первом попавшемся под руку языке, ниже:

(def mark-input (num)
     ; Определяем template -- шаблон строки на вывод
     (let template "0 \n1 \n2 \n3 \n4 \n5 \n6 \n7 \n8 \n9 \n"
          (if (and (>= num  0) (<= num 9))
              ; Если число находится в промежутке 0-9, 
              ; то вписываем '+' в template[(num*3) + 1]
              ; (Почему? Посмотрите на template 
              ; и расположение символов в нём).
              (= (template (+ 1 (* num 3))) #\+))
          ; Выводим итоговую строку. Не спрашивайте, откуда nil.
          (pr template) nil))


Результат выполнения:
arc> (mark-input 5)
0 
1 
2 
3 
4 
5+
6 
7 
8 
9 
nil
arc> (mark-input (read))
6
0 
1 
2 
3 
4 
5 
6+
7 
8 
9 
nil

Пользователь вводит число Х. Вывести в столбик числа от 0 до 9 и поставить знак '+' напротив того числа, которое равно Х.

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


На python3:
N = '\n0\n1\n2\n3\n4\n5\n6\n7\n8\n9'
X = input()
if int(X) >= 0 and int(X) < 10:
    print(N.replace(X, X+'+'))
else:
    print(N)

Результат
5

0
1
2
3
4
5+
6
7
8
9


1

0
1+
2
3
4
5
6
7
8
9


15

0
1
2
3
4
5
6
7
8
9

Шибко тапками не кидайтесь, я программирование изучаю менее полугода.
Sign up to leave a comment.

Articles