Comments 5
Все очень сильно зависит от уровня студента. На начальном уровне действительно есть разница между двумя одинаковыми по смыслу, но разными по оформлению конструкциями.
В конструкции 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)
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
Шибко тапками не кидайтесь, я программирование изучаю менее полугода.
Как научить преодолевать трудности, а заодно и писать циклы