Serguey Zefirov (thesz) wrote,
Serguey Zefirov
thesz

Про неудачу с Хаскелем.

Возникла у меня идея попробовать сделать эмуляцию обычной логики, без тактового генератора. Если раньше я использовал равномерное время и задержка у всех элементов схемы была одинаковой, то теперь я решил приписывать событиям время: type Event a = (Integer,a); type Events a = [Event a].

С таким подходом можно сделать свой собственный тактовый генератор:
generator delay = r
        where
                r = eNot False delay r -- начальное значение, задержка, вход
Через некоторое время все заработало - не с первой попытки, как с равномерным временем, - и я решил развить успех, добавив оптимизацию.

Оптимизация заключалась во вставке очень простой функции между выходом, допустим, логического И и входами, на которое оно должно подать сигналы. Функция должна была отрезать одинаковые события:
eFilter :: Eq a => Events a -> Events a
eFilter ((ta,a):xs@((tb,b):ys))
        | a == b = eFilter $ (ta,a):ys
        | otherwise = (ta,a) $ eFilter xs
eFilter xs = xs
Таких событий создается достаточно много, например, в триггере, поскольку это циклическая структура.

И как только я вставил эту оптимизацию в триггер, я получил зацикливание.

Если обычные обработчики потоков сообщений смотрят вглубь не более, чем на один элемент, то eFitler смотрит на два. А второй элемент зависит от результата его просмотра с помощью eFilter.

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

По идее, если бы можно было посмотреть, который из потоков готов, то это можно было бы оформить каким-то образом. Это прошло бы в случае Эрланга, например, там идентичность (identity) обьектов явная.
Tags: Хаскель, Эрланг, моделирование аппаратуры, языки программирования
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 35 comments