추상 위키백과/업데이트/2022-04-21
◀ | 추상 위키백과 업데이트 | ▶ |
오늘의 뉴스레터는 기술적인 세부 사항에 초점을 맞출 것이며 데이터 모델의 복잡한 세부 사항에 뛰어들고 싶지 않다면 건너뛰어도 됩니다.
지난 몇 주 동안 우리는 반복적으로 차단기에 부딪쳤지만 아직 해결하지 못했습니다. 이는 표현이 매우 길어지지 않고 형식화된 목록을 표현하는 방법입니다. 위키함수의 목록은 특정 순서로 알 수 없는 수의 요소를 포함하는 유형입니다.
위키함수 데이터 모델에서 목록은 프로그래밍 언어 리스프에서와 동일한 방식으로 표시됩니다. 목록은 두 부분으로 구성됩니다. 하나는 목록의 첫 번째 요소인 "머리"이고, 다른 하나는 목록의 첫 번째 요소인 "꼬리"입니다. 자체가 목록이고 목록의 나머지 부분을 보유합니다. 또한 머리나 꼬리가 없고 요소가 0인 목록을 나타내는 빈 목록이 있습니다. 위키함수에서 목록 유형은 Z10/List입니다.
따라서 두 개의 요소 "a"
및 "b"
가 있는 목록은 일반적인 JSON 표기법으로 표시되며 다음과 같습니다:
{
"type": "리스트",
"head": "a"
"tail": {
"type": "리스트",
"head": "b",
"tail": {
"type": "리스트"
}
}
}
|
{
"Z1K1": "Z10",
"Z10K1": "a"
"Z10K2": {
"Z1K1": "Z10",
"Z10K1": "b",
"Z10K2": {
"Z1K1": "Z10"
}
}
}
|
글이 좀 길어지니 JSON의 배열 표기법을 사용하여 단축키를 도입하여 목록을 다음과 같이 표현할 수 있습니다:
[ "a", "b" ]
간략한 표기법(표준화라고 함)은 위에서 본 긴 표기법으로 쉽고 기계적으로 번역할 수 있으며 그 반대도 가능합니다.
η 단계에서 우리는 유형 목록을 가질 가능성을 도입했습니다. 일반 목록에서는 목록의 요소 유형에 대해 아무 말도 하지 않는 반면, 유형이 지정된 목록에서는 "목록의 모든 요소는 특정 유형이어야 합니다"라고 말합니다. 타이핑된 목록을 사용하면 타이핑에 대한 더 강력한 보장을 받을 수 있습니다. 타이핑된 목록의 요소를 요청하면 결과가 어떤 유형인지 알 수 있습니다. 이것은 유형 검사와 더 나은 인터페이스를 제공하는 데 도움이 될 수 있습니다.
형식화된 목록은 함수 호출의 결과입니다. Z881/Typed list라는 함수가 있습니다. 이 함수는 유형을 유일한 인수로 취하고 유형을 반환합니다. 결과 유형은 Z10/List의 복사본입니다. 차이점은 헤드가 모든 유형의 값을 갖는 대신 인수로 제공된 유형의 값을 가져야 한다는 점입니다. 그리고 tail은 Z10/List 유형이 아니라 주어진 인수 유형으로 Z881/Type list를 호출하여 반환되는 유형입니다.
이전에 가지고 있던 목록을 표현하고 싶지만 Z10/List가 아닌 문자열 목록이어야 한다고 가정해 보겠습니다. 문자열 목록은 Z6/String 유형에서 Z881/Typed 목록 함수를 호출하여 생성되는 유형입니다. 이것은 JSON 표기법에서 다음과 같이 보일 것입니다.
{
"type": {
"type": "함수 호출",
"function": "타입 리스트",
"argument type": "문자열"
},
"head": "a"
"tail": {
"type": {
"type": "함수 호출",
"function": "타입 리스트",
"argument type": "문자열"
},
"head": "b",
"tail": {
"type": {
"type": "함수 호출",
"function": "타입 리스트",
"argument type": "문자열"
}
}
}
}
|
{
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6"
},
"K1": "a"
"K2": {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6"
},
"Z10K1": "b",
"Z10K2": {
"Z1K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z6"
}
}
}
}
|
문제는 정보를 잃을 수 있으므로 이에 대해 동일한 단축 표기법을 사용할 수 없다는 것입니다.
우리는 유형을 추측하여 이 문제를 해결하려고 했습니다. 목록을 살펴보고 모든 항목에 동일한 유형이 있으면 유형이 지정된 목록으로 선언합니다. 그러나 첫째, 코드에 상당한 복잡성을 추가하고 둘째, 여전히 모든 문제를 해결하지 못합니다. 위 목록의 단축 형식은 실제로 객체 목록일 수도 있고 문자열 목록일 수도 있습니다. 우리가 알 방법이 없습니다.
우리는 내부 토론과 몇 가지 옵션을 게시하고 있으며 여러분의 생각을 듣고 더 폭넓은 의견을 수집하고자 합니다.