Linq имеет много общего с списками , которые можно найти в функциональных языках и в более распространенных языках, таких как Python, где это уже довольно давно является стандартной и очень широко используемой функцией. *
Для хорошего примера понимания списка, эта функция Python взята из простой проверки орфографии Питера Норвиг
def edits1(word):
s = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in s if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1]
replaces = [a + c + b[1:] for a, b in s for c in alphabet if b]
inserts = [a + c + b for a, b in s for c in alphabet]
return set(deletes + transposes + replaces + inserts)
Это похоже на Linq, с (неявным) select, записанным в начале выражения, вместо того, чтобы быть странным в конце, как в Linq.
лямбда-выражения несколько недовольны в Python, и списки по умолчанию в Python стремятся (подумайте List<T>
) вместо ленивых (IEnumerable<T>
), но это очень близко.
Что касается концепции наличия (в некоторой степени) чисто функциональной цепочки, как здесь ответили другие люди, то это одна из старейших концепций в компьютерных языках (Лиспу сейчас за 50 ...)