Rebol은 함수형 프로그래밍 언어입니까?


9

나는 Rebol만났고 그것에 대해 궁금했다.

나는 여기 에서 다음 스크립트를 만났다 .

 use [feed questions answers][
    feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
    questions: map-each entry feed/get-by-tag <entry> [
        find/match entry/get <id> "http://stackoverflow.com/q/"
    ]

    answers: make block! length? questions

    foreach question questions [
        question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
        foreach entry next question/get-by-tag <entry> [append answers entry/tree]
    ]

    insert clear feed/find-element <entry> answers
    feed/flatten
 ]

모든 컬렉션 조작 작업 map-each은 JavaScript와 C #을 상기시켜주는 기능 기능이 있습니다.

Rebol은 기능적인 언어입니까? 기능적 프로그래밍을 지원합니까? 순수 기능 언어 (PFL)로 분류됩니까?



1
@GregHewgill 해당 리소스에 감사드립니다. StackOverflow Rebol 채팅방 ( chat.stackoverflow.com/transcript/message/7836761#7836761 ) 에서 채팅 한 후에이 질문을했습니다 . 그들은 (우리는) StackExchange의 프로그래머 또는 다른 사이트에 대한 정보 가 없으므로 나중에 참조 할 수 있도록 여기에 요청해야한다고 생각했습니다. 이 링크는 훌륭하지만 여기에서 확장되고 설명되어 Rebol 프로그래머를 경험하지 않은 더 많은 사용자가 이해할 수 있습니다. 이 기사에서 인용 한 내용과 개인적 개발 경험에 대한 답변을 부탁드립니다.
Benjamin Gruenbaum

속성은 Carl의 XML 시나리오를 거의 개선하지 못합니다. 여전히 메타 데이터 (속성 이름) 및 유형이 지정되지 않은 값 (속성 내용)이 여전히 있습니다. 신중하게 정의 된 유형으로 제공되는 Rebol의 암시 적 메타 데이터는 해석에 대한 상당한 부담을 제거합니다. XML을 사용하면 먼저 값을 잠금 해제 한 다음 해독해야합니다 (XML에 정의 된 날짜는 어떻게됩니까? RSS 또는 Atom 사양을 확인해야합니까? XML로 정의를 표현할 수 있습니까?). 그들의 상황을 평가할 수 있습니다. ** [댓글 (에 응답하여 주석으로 의도 programmers.stackexchange.com/questions/1

답변:


13

공식적으로 정의 된 " 순수한 기능 프로그래밍"은 출력이 순전히 "기계 입력의 함수" 인 계산 기계를 설계하는 아이디어에 관한 것입니다 . 기계에 동일한 입력을 공급하면 동일한 출력이 생성됩니다. 각 입력의 이름은 명시 적으로 지정되므로 종속성이 무엇인지 정확하게 알 수 있습니다. 순수한 기능적 프로그래밍 언어는이를 엄격하게 시행합니다.

그러나 ... "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에 결함이 있음을 참조하십시오 .


1
좋은 답변이지만 "처음부터 XML에 결함이 있었음"기사는 꽤 나쁘다고 생각합니다. 먼저, 그는 열악한 XML을 사용합니다 (네 스팅으로 표현한 모든 것은 속성으로 표현 될 수 있습니다). 둘째, 언어 XML과 유사한 구조의 트리 표현됩니다. 문장을 구문 분석 할 때 구문 분석 트리가 생깁니다. 그래머 정보가 포함 된 XML을 도메인 특정 문자열과 비교하는 것은 불공평합니다. 답변 주셔서 감사합니다 :)
Benjamin Gruenbaum

2
나는 Rebol n00b이고 당신이 말했듯이 지금도 Rebol이 DO 방언이라고 생각합니다. 이 사고 방식에서 벗어나기를 바랍니다. :-)
KK.

1
@BenjaminGruenbaum Carl의 웹 사이트를 편집 할 수 있다면 저를 믿으십시오. :-)
HostileFork는 SE

@BenjaminGruenbaum 그러나 모든 언어가 그 트리 구조를 자유롭게 조작 할 수있는 것은 아닙니다. Rebol은 그런 점에서 매우 잘 알려져 있습니다.
이즈 카타
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.