LINUX.ORG.RU

Фруктовый микс

 ,


0

2

Есть ли такой подход, когда для написания большей части логики используется функциональная парадигма, а для некоторых вспомогательных частей - императивная? Например разделять на уровне синтаксиса ЯП какие функции/методы являются «чистыми», а какие нет. Что-то на уровне псевдокода:

// объявления в чисто функциональном стиле
defunc PrimeNums = 2 : [n | n <- [3..], IsPrime n]
defunc IsPrime n = foldr (\p r-> p*p>n || (rem n p /= 0 && r)) True PrimeNums

// объявления в императивном стиле
def Foo(a, b, c):
    v1 = IsPrime(a)
    v2 = IsPrime(b)
    v3 = IsPrime(c)
    return v1 or v2 or v3
Причем вызов «обычных» def-методов возможен только из других def-методов, но не из defunc.
Существуют ли подобные ЯП? Может быть Lisp?



Последнее исправление: nerdogeek (всего исправлений: 1)
Ответ на: комментарий от AIv

По сабжу - а почему категорически низя обычные методы вызывать из чистых? И кто сказал что обычным образом сделанный метод не может быть чистым?

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

И, очевидно, что если метод вызывает метод, меняющий глобальный скоп, то и сам этот метод будет менять глобальный скоп - то есть он не будет чистым.

anonymous
()
Ответ на: комментарий от anonymous

Что лифтить, а что - нет, тайпчекеру подскажет боженька?

«Лифтить» - не проблема тайпчекера, он этим не занимается.

Miguel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.