명세서가 뭐예요?[] (빈 목록) 및: (cons 연산자)
리스트를 만들기 위해서는 두 가지가 필요하다.
[]
(빈 목록)와 :
cons 연산자.[] (빈 목록) → 유형 구조기, 빈 목록
: (cons 연산자) - 값과 목록을 조합하는 함수
[]
두 가지 유형의 구조기와 빈 명단을 사용한다.:
(cons 연산자)의 원시 기능은 함수이다.각자의 구조를 상세히 설명하다.[] (유형 구조기, 빈 목록)
우선 각괄호
[]
를 자세히 알아보기 위해:i
명령으로 조사를 해보자.Prelude> :i []
type [] :: * -> * //型コンストラクタとして定義
data [] a = [] | a : [a] //リストの値として定義
같은 방괄호[]
라도 두 가지 사용법임을 알 수 있다.하나는 두 번째 줄의 유형 구조기의 사용 방법이고, 다른 하나는 세 번째 줄의 목록 데이터 형식의 사용 방법이다.유형 구조자로서, 이것은 수신 데이터형 (예: Int) 으로 정의되고, 새로운 데이터형 (예: Int) 을 반환하는 기능으로 정의된다.
*
어렵게 말하면 구체형이고 추출 매개 변수가 필요 없는 일반적인 데이터형(즉 Int,Char,Double 등)으로 생각하십시오.데이터 유형으로 OR 조건으로 정의하여 값을 가져옵니다.
[] | a : [a]
는[]
OR 조건에서 두 가지 방법을 사용하는 것을 말한다.)하나의 값(OR 조건 왼쪽)은 빈 목록이고, 다른 값(OR 조건 오른쪽)은 빈 목록이 아니라 하나의 값 목록이다.(수신형 변수 a, [a]형의 값을 만들어라.)각괄호
[]
는 같은 기호라도 두 가지 다른 사용법이 있다는 것이다.데이터 형식으로 사용하시겠습니까?값으로 사용하시겠습니까?에 따라, 완전히 다른 뜻이 있다.
1. 금형구조기
첫 번째 사용 방법은 구조기다.유형 구조기란 데이터형을 만드는 데이터형을 가리킨다.간단하게 말하면, 그것은 어떤 데이터형에 달라붙어 다른 데이터형을 만드는 기능을 가지고 있다.
다른 데이터 형식을 목록(데이터 형식)과 결합시켜 목록 형식의 값을 만듭니다.다음 그림과 같습니다.
이 메커니즘을 사용하여 목록에 데이터 형식을 지정할 수도 있습니다.
Prelude> [1,2,3] :: [Int]
[1,2,3]
여기서 [1,2,3]
라는 목록에 [Int]
라는 데이터 형식을 지정했습니다.단순한 Int가 아니라 리스트 유형의 Int입니다.무엇이 중형 구조기입니까?
데이터 유형.이렇게 말하면 매우 어렵다.형 구조기는 일본어로 직접 생각하면 이해하기 쉬울 것 같다.
유형 = 데이터 유형
구조기
타입 구조기란 데이터형을 구축하는 것(만드는 것)이라는 것이다.Int, Char 등의 데이터 유형과는 완전히 다릅니다.따로 데이터형으로 만들 수 없는 반인분의 존재다.다른 데이터형과 조합해야만 혼자서 한 면을 맡을 수 있다.
또 다른 유명한 유형의 구조기
Maybe
도 있다.Prelude> :i Maybe
type Maybe :: * -> *
data Maybe a = Nothing | Just a
여기도 []
와 같다. 두 번째 줄은 유형 구조기, 세 번째 줄은 OR 조건의 데이터 형식으로 정의한다.유형 구조자로서 데이터형(예를 들어 Int)을 받아들이고 새로운 데이터형(예를 들어 Maybe Int)을 반환해야 한다고 한다.데이터 형식이 아니면
Nothing
어떤 데이터 형식의 값을 되돌려줄지 지정할 수 있습니다.이상은 그림으로 아래와 같다.[]
이런 유형의 구조기는 다른 데이터 유형과 결합하여 목록을 만든다.첫 배역이야.2. 빈 목록
두 번째는 값으로 사용하는 방법이다.
[]
빈 목록 값이 있습니다.이번에는 단지 가격으로 사용하는 상황일 뿐이다.그래서 같은 []
라도 구조기를 써야 하나요?값으로 사용하시겠습니까?뜻은 상황에 따라 완전히 다르다.Prelude> []
[]
여기는 빈 목록만 값으로 출력합니다.그나저나
[]
, [[]]
의 뜻은 완전히 다르다.첫 번째는 빈 목록이고, 첫 번째는 빈 목록을 포함하는 목록입니다.: (cons 연산자)
이것은 목록을 만드는 데 필요한 두 번째다.cons 연산자는 일반 값에서 목록을 출력하는 함수입니다.cons는 cons tructor의 약칭으로 Lisp에서 기원한다.
우리 cons 연산자의 구체적인 내용을 봅시다.
Prelude> :t (:)
(:) :: a -> [a] -> [a]
:
는 함수로 정의되어 있음을 주의하십시오.通常の値
+ リスト
= リスト化された通常の値
이런 기능이 있다.일반적인 값 이외에 목록이 필요하다는 것을 주의하십시오.cons 연산자 중 하나가 목록이 아니면 목록을 만들 수 없습니다.Prelude> 1 :[]
[1]
는 상기 목록[]
(빈 목록)과 :
(cons 연산자)를 조합하여 만든다.중간 연산자로 정의되어 있기 때문에 1
와 []
사이에cons 연산자를 설정합니다.문법 사탕옷
목록의 원래 쓰기 방법은
1:2:3:[]
였다.[1,2,3]
라고 쓸 수 있었던 것은 문법 당의의 구조를 사용했기 때문이다.문장 구조 당의는 간단하게 기술하기 위한 구조다.1:2:3:[]
와 [1,2,3]
는 모두 똑같아서 후자는 직관적으로 이해하기 쉽다.이렇게 생각하십시오
Prelude> 1:2:3:[]
[1,2,3]
1:2:3:[]
.[]
는 빈 목록입니다.그 첫머리에 3을 추가하면[3]
.그리고 처음에 2를 추가하면[2]
.마지막으로 첫머리에 1을 추가하면[1]
.Prelude> 1:2:3:[4,5,6]
[1,2,3,4,5,6]
위와 같이 쓰셔도 됩니다.[4:5:6]
이 목록은 쓰기4:5:6:[]
와 완전히 같다.따라서 cons 연산자를 사용하여 []
의 시작에 끊임없이 수치를 증가시킨다.이것은 잘못된 것이다
Prelude> [1,2,3] : [4,5,6]
// リスト同士をつなげるには++演算子を使う
참고로, 목록을 cons 연산자로 연결하려면 오류가 발생할 수 있습니다.여기에 ++
연산자가 필요합니다. 주의하십시오.
Reference
이 문제에 관하여(명세서가 뭐예요?[] (빈 목록) 및: (cons 연산자)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/masahiro_toba/articles/6705a7005b7827텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)