{{위키데이터 속성 추적}}
{{Infobox programming language
|name = 루시드<br />Lucid
|logo =
|paradigm = [[데이터플로 프로그래밍|데이터플로]]
|year = 1976년
|designer = 에드워드 A. 애시크로프트<br>윌리엄 W. 웨지
|developer =
|latest release version = 
|latest release date = 
|typing = Typeless
|implementations = pLucid
|dialects = GIPSY, Granular Lucid
|influenced_by = [[ISWIM]]
|influenced = [[SISAL]], [[PureData]], [[Lustre]]
}}

'''루시드'''(Lucid)는 [[폰 노이만 구조]]를 따르지 않는 프로그래밍 모델을 갖춘 실험적으로 설계된 [[데이터플로 프로그래밍]] 언어이다. 빌 웨지(Bill Wadge)와 에드 애시크로프트(Ed Ashcroft)에 의해 설계되었으며 1985년 책 "데이터플로 프로그래밍 언어, 루시드"(Lucid, the Dataflow Programming Language)에 기술되었다.<ref name="book">{{서적 인용
| first1 = William W.
| last1 = Wadge
| first2 = Edward A.
| last2 = Ashcroft
| date = 1985
| title = Lucid, the Dataflow Programming Language
| publisher = Academic Press
| isbn = 0-12-729650-6
| url = https://archive.org/details/luciddataflowpro00wadg_0
| access-date = 8 January 2015
| url-access = registration
}}</ref>

pLucid는 루시드를 위한 최초의 [[인터프리터]]이다.

== 예시 ==
=== [[계승]] ===
 fac
   where
     n = 0 fby (n + 1);
     fac = 1 fby ( fac * (n + 1) );
   end

=== [[피보나치 수]] ===
 fib
   where
     fib = 0 fby ( 1 fby fib + next fib );
   end

=== [[소수 (수론)|소수]] ===
 prime
   where
      prime = 2 fby (n whenever [[isprime]](n));
      n = 3 fby n+1;
      isprime(n) = not(divs) asa divs or prime*prime > N
                      where
                        N is current n;
                        divs = N mod prime eq 0;
                      end;
   end

==== [[데이터 흐름도]] ====
[[파일:Prime numbers sequence dataflow diagram (Lucid).png|가운데|579x579px]]

=== [[퀵 정렬]] ===
 qsort(a) = if eof(first a) then {{not a typo|a}} else follow(qsort(b0),qsort(b1)) fi
   where
      p = first a < a;
      b0 = a whenever p;
      b1 = a whenever not p;
      follow(x,y) = if xdone then y upon xdone else x fi
                      where
                         xdone = iseod x fby xdone or iseod x;
                      end
   end

==== 데이터 흐름도 ====
     --------> whenever -----> qsort ---------
    |             ^                           |
    |             |                           |
    |            not                          |
    |             ^                           |
    |---> first   |                           |
    |       |     |                           |
    |       V     |                           |
    |---> less ---                            |
    |             |                           |
    |             V                           V
 ---+--------> whenever -----> qsort -----> conc -------> ifthenelse ----->
    |                                                       ^   ^
    |                                                       |   |
     --------> next ----> first ------> iseod --------------    |
    |                                                           |
     -----------------------------------------------------------

=== [[제곱평균제곱근]] ===
 sqroot(avg(square(a)))
   where
      square(x) = x*x;
      avg(y)    = mean
         where
           n = 1 fby n+1;
           mean = first y fby mean + d;
           d = (next y - mean)/(n+1);
         end;
      sqroot(z) = approx asa  err < 0.0001
         where
           Z is current z;
           approx = Z/2 fby (approx + Z/approx)/2;
           err    = abs(square(approx)-Z);
         end;
    end

== 각주 ==
{{각주}}

== 외부 링크 ==
* [https://code.google.com/p/plucid/ pLucid]
{{전거 통제}}

[[분류:병행 프로그래밍 언어]]
[[분류:선언형 프로그래밍 언어]]
[[분류:질의 언어]]