추상 위키백과/업데이트/2022-01-13

This page is a translated version of the page Abstract Wikipedia/Updates/2022-01-13 and the translation is 100% complete.
추상 위키백과 업데이트 Translate

메일링 리스트를 통한 추상 위키백과 IRC의 추상 위키백과 텔레그램의 위키함수 마스토돈의 위키함수 트위터의 위키함수 페이스북의 위키함수 유튜브의 위키함수 위키함수 웹사이트 Translate

에타(η) 단계 업데이트.

새해 복 많이 받으시고 2022년 첫 뉴스레터에 오신 것을 환영합니다!

위키함수에 대한 작업을 시작할 때 작업을 11개의 함수 단계로 나누었습니다. 그리스 알파벳의 처음 11개 글자의 이름을 따서 명명했습니다(최근에 악명 높은 명명 체계). 우리는 현재 제네릭 유형과 함수를 허용하여 위키함수의 함수 모델을 완전히 다시 수행하는 것을 목표로 에타(η) 단계를 작업 중입니다.

팀 내 논의에 따라 현재 단계의 완료 기준을 구체화하여 보다 가시적으로 만들고 있습니다. 단계를 완료했음을 표시하는 방법에 대한 원래 아이디어는 다음과 같은 함수 호출을 위해 매우 심층적인 정적 유효성 검사를 많이 수행하는 것이었습니다:

(1) if(head([true]), false, true)

유효성을 검사하지만

(2) if(head(["text"]), false, true)

은 안됩니다. 설명하자면 if 함수는 첫 번째 인수로 Boolean이 필요하지만 head는 현재 head(List) → Object로 정의되어 있습니다. 따라서 정적 분석에서 ifBoolean이 필요하지만 Object를 얻습니다. 그러나 이것이 괜찮다고 한다면 (1)과 (2) 모두에 대한 정적 분석은 통과할 것이고 (2)는 통과해서는 안 됩니다.

반면에 정적 분석뿐만 아니라 코드를 실행할 때 발생하는 동적 분석도 있습니다. 그 중 (1)은 false을 전달하고 반환해야 하는 반면, (2)는 평가 중에 유형 오류를 발생시켜야 합니다("if는 첫 번째 인수에서 Boolean을 예상하지만 String을 얻었습니다"와 같은 것).

지금은 심층 정적 분석의 범위를 해제하기로 결정했습니다. 이것은 아마도 Wikifunctions.org를 시작한 후에 나중에 추가할 수 있는 것입니다. 보시다시피 사용자는 어떤 식으로든 오류 메시지를 받게 됩니다. 정확히 언제 오류가 발생했는지에 대한 질문일 뿐입니다. 또한 이러한 주제 또는 유사한 주제에 대한 작업에 관심이 있는 경우 연락하십시오. 우리는 항상 자원 봉사자 및 기타 외부 파트너의 작업을 기꺼이 통합합니다.

이 정적 분석 대신 단계가 완료되는 방법의 예로서 다음 기능에 초점을 맞추기로 결정했습니다.

  • curry를 위키에서 컴포지션으로 구현할 수 있지만 엄격한 정적 분석이 필요하지 않음
  • 위키에서 다음 세 가지 '사용자 정의' 유형 생성 가능: positive integer, sign 그리고 integer
  • 위키에서 작성을 통해 일반 감싸기(래퍼) 유형을 만들 수 있음
  • 재설계된 기능 편집기 제공(다음 단계로 푸시될 수 있음)

이러한 각 기능에 대해 자세히 알아보겠습니다.

커링

이것이 작동하려면 사용자가 함수를 인수로 사용할 수 있어야 하고 해당 함수를 curry 구현의 함수 호출에 사용할 수 있어야 합니다. 커리는 무엇인가요? 커리는 함수 f와 다른 객체 x를 취하여 객체에 대해 함수를 실행하는 컴퓨터 과학의 표준 함수입니다. 표준 형식은 함수 f에 두 개의 인수가 있으며 첫 번째 인수는 x 유형이고 '출력'은 두 번째 인수가 값 x로 미리 설정된 함수 f에 대한 호출입니다. 예: 다른 문자열에 문자열을 추가하는 함수가 주어지면, curry(append, "s")를 호출하여 "끝에 s를 추가"하는 새 함수를 만들 수 있습니다. 우리는 그러한 함수를 정의하고 호출하는 것을 가능하게 만들고 싶습니다.

사용자 정의 유형

양의 정수

다음 사항이 가능해야 합니다:

  • String 유형의 단일 키 value를 사용하여 새 유형 Positive Integer를 만듭니다.
  • Positive Integer를 검증하는 함수 생성
    • value에 숫자(0-9)가 아닌 문자가 포함된 경우 유효성 검사기는 숫자가 아닌 문자로 사용자 생성 오류를 발생시킵니다.
    • value에 선행 0이 포함되어 있고 단일 0이 아닌 경우 유효성 검사기는 사용자 생성 오류를 발생시킵니다.
    • value가 빈 문자열이면 유효성 검사기가 사용자 생성 오류를 발생시킵니다.
  • 유효성 검사기를 Positive Integer 유형에 연결합니다.
  • 다음 8개 함수를 만듭니다:
    • Is zero: Positive Integer → Boolean(인수가 0이면 True를 반환하고 그렇지 않으면 False를 반환)
    • Successor: Positive Integer → Positive Integer (1만큼 증가된 인수를 반환)
      • 자바스크립트로 구현 제공 (BigInt) 및 파이썬 (bignum)
    • Predecessor: Positive Integer → Positive Integer (1만큼 감소된 인수를 반환하고 인수가 0인 경우 오류를 발생)
      • 자바스크립트로 구현 제공 (BigInt) 및 파이썬 (bignum)
    • Positive Integer: String → Positive Integer (생성자)
    • Positive Integer as String: Positive Integer → String (소멸자)
    • Equal Positive Integer: Positive Integer, Positive Integer → Boolean (두 숫자의 값이 같은지 여부)
    • Greater Than: Positive Integer, Positive Integer → Boolean (첫 번째 숫자가 두 번째 숫자보다 큰지 여부)
    • Lesser Than: Positive Integer, Positive Integer → Boolean (두 번째 숫자가 첫 번째 숫자보다 큰지 여부)

부호

수학 용어 "부호"와 관련하여 다음과 같은 일이 가능합니다:

  • Sign 유형의 단일 키 identity를 사용하여 새 유형 Sign 생성
  • Sign 유형의 가능한 세 가지 값을 생성, 즉 positive, negativeneutral
  • Sign 유효성을 검사하는 함수 생성
    • 값이 예상되는 세 값 중 하나가 아니면 오류 발생
  • 유효성 검사기를 Sign 유형에 연결
  • 다음 함수를 생성:
    • Equal sign: Sign, Sign → Boolean (두 인수의 값이 같으면 True 반환)

정수

다음과 같은 일이 가능:

  • Positive Integer 유형의 absolute valueSign 유형의 sign라는 두 개의 키가 있는 Integer 유형을 새로 생성
  • Integer 유효성을 검사하는 함수 생성
    • 두 키가 모두 검증되었는지 확인
    • signneutral이고 absolute valuezero가 아니거나 "그 반대의 경우"인 경우 오류를 발생
  • Integer 유형으로 유효성 검사기를 연결
  • 다음 6가지 함수 생성:
    • Integer: Positive Integer, Sign → Integer (생성자)
    • Absolute value: Integer → Positive Integer (소멸자)
    • Sign: Integer → Sign (소멸자)
    • Equal Integer: Integer, Integer → Boolean (두 숫자의 값이 같은지 여부)
    • Greater Than: Integer, Integer → Boolean (첫 번째 숫자가 두 번째 숫자보다 큰지 여부)
    • Lesser Than: Integer, Integer → Boolean (두 번째 숫자가 첫 번째 숫자보다 큰지 여부)

제네릭 래퍼

제네릭 래퍼는 형식을 취하고 해당 형식의 값을 가진 단일 키가 있는 새로 생성된 형식을 반환하는 함수입니다. 래퍼는 예를 들어 실수로 무언가를 숫자처럼 보이는 숫자로 취급하지 않도록 하는 데 유용할 수 있습니다. 다소 단순한 제네릭 유형이기 때문에 테스트 케이스로도 유용합니다.

  • 제네릭 유형을 생성하는 함수 생성, 즉 Wrap Type: Type → Type
  • 제네릭 생성자 함수 생성, 즉 Wrap: Type T → Function 시그니처의 함수를 반환하는 함수 T → Wrap Type(T)
  • 제네릭 소멸자 함수 생성, 즉 Unwrap: Type T → Function 시그니처의 함수를 반환하는 함수 Wrap Type(T) → T
  • Wrap Type(Boolean) 유형의 리터럴을 위키 상의 객체로 저장
  • Wrap Type(T)과 함께 작동하는 함수를 생성하는 제네릭 함수를 작성, 즉 Wrapped Equality: Type T → λ: Wrap(T), Wrap(T) → Boolean
  • 이 모든 기능은 사용자 공간에서 완전히 작성될 수 있어야 합니다.
  • Unwrap(Boolean)(Wrap(Boolean)(True))와 같은 것을 호출하여 테스트하고 True를 다시 얻기

다음은 어디로?

이 단계에서 수행해야 할 작업이 아직 많이 있지만 대부분의 작업이 거의 완료되었습니다. 이 단계가 완료되면 여러분이 플레이할 수 있도록 베타 클러스터를 준비하는 데 집중할 것입니다.

새해 복 많이 받으세요!