Функция - это такая абстракция, которая заставляет внутри делать то, что потом не нужно снаружи.
Есть какая-то экзистенциальная грусть, что в таком вот коде
if (sequence.count() > 1) {
...
}
sequence придется вычислить весь, даже на языке с нормальной системой типов™ и правильной ленивостью™. Как будто два кусочка кода, внутри count() и
(
Read more... )
Comments 119
interface ICollection
{
add()
remove()
count()
length
}
Есть и count() и length. тяжело сделать синхронизированный счетчик _length и оставить один length?
Reply
Reply
На мой взгляд, единственный случай когда существование двух методов оправданно - когда collection/sequence заполняется лениво. Но почему тогда lazy collections пытаются прикидываться обычными collections?
Reply
Reply
Reply
Reply
Reply
Reply
Либо, безотносительно статики/динамики и ленивости/энергичности можно выбрать нужную структуру. Под задачу, как это обычно бывает. Мы же в linked list не используем random access.
Хотя обычно, конкретно для этого случая (единица) всё просто.
Reply
Reply
Reply
Поскольку 1×A≡A, то Nat=1+Nat ≡ List(1)=1+1×List(1), а ленивые числа Пеано изоморфны ленивым спискам единиц.
Reply
Reply
Reply
(define (list-find lst val)
;; сохраняем continuation как переменную return:
(call/cc (lambda (return)
(for-each (lambda (v)
(if (eqv? val v)
;; все тело call/cc «отменяется»
;; и его значением становится v:
(return v)
#f))
lst)
#f)))
В Хаскеле есть Control.Monad.Cont, еще и типизированный.
Reply
Reply
Leave a comment