vak: (Default)
[personal profile] vak
В середине 80-х лучшим языком для символьного дифференцирования считался Рефал.
Diff  {
      (e.t) e.1 '+' e.2 = <Diff (e.t) e.1> '+' <Diff (e.t) e.2>;
      (e.t) e.1 '-' e.2 = <Diff (e.t) e.1> '-' <Diff (e.t) e.2>;
      (e.t) e.1 '*' e.2 = (e1 '*' <Diff (e.t) e.2>
                          '+' <Diff (e.t) e.1> '*' e.2);
      (e.t) (e.1)       = ( <Diff (e.t) e.1> );
      (e.t) e.t         = '1';
      (e.t) e.1         = '0';
}
Нынче Хаскель поинтереснее будет:
Dif a = D a (Dif a)

dConst :: Num a => a -> Dif a
dConst x0 = D x0 dZero
 
dZero :: Num a => Dif a
dZero = D 0 dZero

instance Num a => Num (Dif a) where
  fromInteger               = dConst . fromInteger
  D x0 x’ + D y0 y’         = D (x0 + y0) (x’ + y’)
  D x0 x’ - D y0 y’         = D (x0 - y0) (x’ - y’)
  x@(D x0 x’) * y@(D y0 y’) = D (x0 * y0) (x’ * y + x * y’)

Date: 2008-07-24 22:35 (UTC)
From: [identity profile] vadim-kataev.livejournal.com
ну я в общем то начинал с Пролога, а по поводу Хаскеля мне вот эта книга очень помогла:
http://www.amazon.com/Haskell-Logic-Maths-Programming-Computing/dp/0954300696/ref=pd_bbs_sr_3?ie=UTF8&s=books&qid=1216938892&sr=8-3