Комментарии 22
Проходили на втором курсе, было приятно вспомнить контрольные на 6 часов. По коду много замечаний (н-р Zero лучше сделать object), напишу утром.
0
Пишите, буду рад замечаниям, ибо в Scala опыта очень мало
0
Извините, очень жесткий запар на работе. Если действительно интересны замечания, то выложите на github и я посмотрю.
Вот мой пример в догонку
Вот мой пример в догонку
package org.example
trait Num {
def value: Int
}
object Zero extends Num {
val value = 0
}
case class Succ(arg: Num) extends Num {
val value = arg.value + 1
}
case class Proj( idx: Int, args: Num*) extends Num {//буду считать, что n содержится в args
require(!args.isEmpty)
require(0 <= idx && idx < args.size)
def value = args(idx) value
}
case class Sum(a: Num, b: Num) extends Num {
def value = (b match {
case Zero => a
case Succ(num) => Succ(Proj(2, a, num, Sum(a, num)))
}) value
}
object ExampleApp extends App {
val one = Succ(Zero)
val two = Succ(Succ(Zero))
println(Sum(one, two) value)
}
0
Ваш пример не совсем то, что я хотел получить. Ваше определение succ использует сложение, которое еще не определено, а я же хотел не использовать в принципе нативные классы типа Int и соответственно операции с ними связанные, дабы показать, как определить число как таковое, базируясь на рекурсии и только. Никакого практического интереса в этом конечно нет, но для понимания возможностей рекурсивных функций это, на мой взгляд, хороший пример.
0
Да, я знал, что вы так скажите =). Ваш пример безусловно хорош этим.
Я использовал Int и операции с ним так как 0 и +1 определены, value только вычисляет выражение.
Я только хотел примером показать, как понятнее становится код, если использовать возможности языка (чем на мой взгляд, ваш пример очень хромает).
Я использовал Int и операции с ним так как 0 и +1 определены, value только вычисляет выражение.
Я только хотел примером показать, как понятнее становится код, если использовать возможности языка (чем на мой взгляд, ваш пример очень хромает).
0
НЛО прилетело и опубликовало эту надпись здесь
Впечатлён лаконичностью и интуитивностью приведённого кода.
+2
А ссылочка на архив прокомментированного кода будет?
И можно тоже самое, только на ANSI C? )))
И можно тоже самое, только на ANSI C? )))
0
Похоже на выжимку из начала TAPL'а.
0
А где же функция Аккремана? :-) Вот здесь похожая реализация множеств.
Пара мелких замечаний: s/вИЮ/Inf (Что это за раскладка?), s/Predicat/Predecessor/.
Пара мелких замечаний: s/вИЮ/Inf (Что это за раскладка?), s/Predicat/Predecessor/.
0
Оу, статья о Computer Science! Большое спасибо!
0
Я вот сейчас подумал, и понял что, в принципе, даже операцию сравнения можно реализовать в виде функции, а если очень постараться — то и конструкция if else можно сделать отдельной функцией. Собственно на этом и построена scala… если кому интересно, могу добавить в пост
0
НЛО прилетело и опубликовало эту надпись здесь
Прочитал определение рекурсивной функции. По-вашему число итераций должно быть известно заранее?
Интересно, а как бы вы определили вычисление множества Мандельброта, где число итераций рекурсивной функции — искомое значение?
Интересно, а как бы вы определили вычисление множества Мандельброта, где число итераций рекурсивной функции — искомое значение?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Рекурсивные функции — создание собственной математики (Scala)