공식적으로 정의 된 " 순수한 기능 프로그래밍"은 출력이 순전히 "기계 입력의 함수" 인 계산 기계를 설계하는 아이디어에 관한 것입니다 . 기계에 동일한 입력을 공급하면 동일한 출력이 생성됩니다. 각 입력의 이름은 명시 적으로 지정되므로 종속성이 무엇인지 정확하게 알 수 있습니다. 순수한 기능적 프로그래밍 언어는이를 엄격하게 시행합니다.
그러나 ... "Rebol"기준선에서 다음과 같은 내용을 작성할 수 있습니다.
foo: function [value [integer!]] [
either now/date = 20-Feb-2013 [
value + 1
] [
value
]
]
여기에 매일 그러나 오늘 값을 더한 정수 입력을 반환하는 함수가 있습니다. 함수에 대한 인수로 공식적으로 지정되지 않은 날짜에 보이지 않는 종속성이 포함됩니다. 그것은 하스켈 사람들과 나 같은 소프트웨어 형식 주의자들이 피의 살인을 외 치게 만드는 그런 종류의 일입니다.
따라서 Rebol은 순전히 기능 적인 것은 아닙니다 . (...하지만 계속 읽으십시오 ...)
함수형 프로그래밍의 덜 엄격한 정의는 함수가 언어의 값으로 작동 할 수있는 경우입니다. 따라서 함수를 변수에 할당하고 나중에 사용할 수 있습니다. 그런 의미에서, 당신 은 자바 스크립트가 기능적 언어 인 것을 좋아할 수 있고, 욕설 정의가 일부 사람들이 자바 스크립트가 기능적 언어라고 말할 수 있다는 것을 알 수 있습니다. 당신이 그 정의를 느슨하게 만들려면 이것이 "기능적"일 것입니다 :
>> foo: does [a + 10]
>> a: 20
>> print foo
== 30
(참고 : DOES는 본문이없는 인수없이 함수를 정의 할 때 편리합니다.)
나는 내가 말하는 사람들이 함수형 프로그래밍이라고 부르는 것에 맞게 그 (또는 JavaScript)를 고려할 것이라는 것을 모른다. YMMV.
컴퓨터 과학에서 시간을 보낸다면 Turing Tarpits 및 계산 성과 같은 것들과 "X를 Y에 연결할 수 있다면 Z는 사실입니다"라는 등가 원리에 대해 배웁니다. C로 Haskell 구현을 작성한 다음 Haskell 라이브러리에 매핑 된 C 호출 만 사용하도록 제한 할 수있는 것처럼 "기능적 프로그래밍"을 수행하고 기술적으로 정확하다고 주장 할 수 있습니다.
당신이 REBOL는 함수형 프로그래밍 스타일에 구부러진 수 있습니다 말하고 싶었다 그래서, 당신은 비관 주의자가 될 수 있으며 말할 잘 더 나은 당신이 실제로 언어의 같은 밀폐 된 하위 집합을 사용하면 그 '때 당신이 C를하고있는 척 이상이다 " "대리 하스켈을 사용하여 다시 . Rebol의 소매업은 당신이 한 "방언"패러다임에서 다른 패러다임으로 얼마나 쉽게 미끄러지 는가입니다. 기능적으로 발생 하는 작은 도메인 별 언어를 작성하는 것은 너무 쉽고 자연 스럽기 때문에 언어를 공동으로 사용하여 언어를 왜곡하는 것처럼 느끼지 않습니다. 기능적 특성을 가진 도메인 특정 언어를 만들 수있는 기능은 Rebol의 레이블을 "패러다임 중립"으로 표시 합니다.
많은 사람들이 Rebol을 가장 일반적인 방언 (DO 방언)과 섞어서 "Rebol이 무엇인지"생각합니다. 그러나 Rebol의 "본질"은 XML과 비슷합니다. 우연히 (우연히 는 아니지만) 우연히 최적화 된 코드를 사용하여 특정 방식으로 처리하는 데 중점을 둔 데이터 교환 형식입니다 . XML을 능가하는 방법에 대한 배경 지식 은 AmigaOS (현재는 Rebol)의 Carl Sassenrath의 시작에서 XML에 결함이 있음을 참조하십시오 .