вторник, 24 октября 2017 г.

Списки. Haskell vs мои скрипты

f x:xs = 1 : map (*2) xs

Выглядит так:

LIST FUNCTION f
  LIST IN aList
 ANY VAR Head
 LIST VAR Tail
 aList .Split Head Tail
 LIST:Make 1 Map ( 2 * ) Tail
 >>> Result
; // f

У меня нет pattern-matching'а. Поэтому Split.

Ну и да - скрипты у меня конечно императивные. Но с ленивыми вычислениями. И без лишнего копирования списков.

Map ( 2 * ) Tail - не копирует Tail.

LIST:Make - тоже. Там Связный список.


Про замену .Split написано тут - http://programmingmindstream.blogspot.ru/2017/10/data-haskell-vs.html?m=1

 aList .Split Head Tail

Можно сделать так (под капотом):

MATCH List:Make ( Head Tail )

Тут говорим, что надо применить pattern matching к конструктору List:Make и положить результаты в ( Head Tail )


А потом MATCH можно спрятать в и вычислять его в зависимости от того с какой стороны от знака равно (=) находится List:Make.

Комментариев нет:

Отправить комментарий