Erlang 21 - 3. Data Types

3 डेटा प्रकार




erlang

3 डेटा प्रकार

Erlang कई प्रकार के डेटा प्रदान करता है, जो इस खंड में सूचीबद्ध हैं।

3.1 शर्तें

किसी भी डेटा प्रकार के डेटा के एक टुकड़े को एक शब्द कहा जाता है।

३.२ संख्या

दो प्रकार के संख्यात्मक शाब्दिक, पूर्णांक और फ़्लोट्स हैं । पारंपरिक अंकन के अलावा, दो एरलंग-विशिष्ट अंकन हैं:

  • $ char
    ASCII मान या यूनिकोड कोड-पॉइंट ऑफ़ द कैरेक्टर char
  • base # value
    आधार base साथ पूर्णांक, जो कि 2..36 की सीमा में पूर्णांक होना चाहिए।

उदाहरण:

1> 42.
42
2> $A.
65
3> $\n.
10
4> 2#101.
5
5> 16#1f.
31
6> 2.3.
2.3
7> 2.3e3.
2.3e3
8> 2.3e-3.
0.0023

३.३ परमाणु

एक परमाणु एक शाब्दिक, नाम के साथ एक निरंतर है। एक परमाणु को एकल उद्धरणों (') में संलग्न किया जाना है, यदि यह निचले-मामले के अक्षर से शुरू नहीं होता है या यदि इसमें अल्फ़ान्यूमेरिक वर्ण, अंडरस्कोर (_), या @ के अलावा अन्य वर्ण हैं।

उदाहरण:

hello
phone_number
'Monday'
'phone number'

3.4 बिट स्ट्रिंग्स और बायनेरिज़

एक बिट स्ट्रिंग का उपयोग अनकैप्ड मेमोरी के एक क्षेत्र को स्टोर करने के लिए किया जाता है।

बिट स्ट्रिंग्स को bit syntax का उपयोग करके व्यक्त किया जाता है।

बिट स्ट्रिंग्स जिसमें कई बिट्स होते हैं जो समान रूप से आठ से विभाज्य होते हैं, बायनेरी कहलाते हैं

उदाहरण:

1> <<10,20>>.
<<10,20>>
2> <<"ABC">>.
<<"ABC">>
1> <<1:1,0:1>>.
<<2:2>>

अधिक उदाहरणों के लिए, Programming Examples देखें।

3.5 संदर्भ

एक संदर्भ एक शब्द है जो एक Erlang रनटाइम सिस्टम में अद्वितीय है, जिसे make_ref/0 कहकर बनाया गया है।

3.6 मज़ा

एक मजेदार एक कार्यात्मक वस्तु है। फंड्स एक अनाम फ़ंक्शन बनाने और फ़ंक्शन को स्वयं पारित करने के लिए संभव बनाते हैं - इसका नाम नहीं - अन्य कार्यों के तर्क के रूप में।

उदाहरण:

1> Fun1 = fun (X) -> X+1 end.
#Fun<erl_eval.6.39074546>
2> Fun1(2).
3

Fun Expressions में Fun Expressions बारे में और पढ़ें। अधिक उदाहरणों के लिए, Programming Examples देखें।

3.7 पोर्ट पहचानकर्ता

एक पोर्ट आइडेंटिफ़ायर एक एरलंग पोर्ट की पहचान करता है।

open_port/2 , जिसका उपयोग पोर्ट बनाने के लिए किया जाता है, इस डेटा प्रकार का मान लौटाता है।

Ports and Port Drivers में Ports and Port Drivers बारे में Ports and Port Drivers पढ़ें।

3.8 पिड

एक प्रक्रिया पहचानकर्ता, pid, एक प्रक्रिया की पहचान करती है।

निम्नलिखित बीआईएफ, जो प्रक्रिया बनाने के लिए उपयोग किए जाते हैं, इस डेटा प्रकार के मान लौटाते हैं:

  • spawn/1,2,3,4
  • spawn_link/1,2,3,4
  • spawn_opt/4

उदाहरण:

1> spawn(m, f, []).
<0.51.0>

निम्न उदाहरण में, बीआईएफ self() कॉलिंग प्रक्रिया का विवरण देता है:

-module(m).
-export([loop/0]).

loop() ->
    receive
        who_are_you ->
            io:format("I am ~p~n", [self()]),
            loop()
    end.

1> P = spawn(m, loop, []).
<0.58.0>
2> P ! who_are_you.
I am <0.58.0>
who_are_you

प्रक्रियाओं में Processes बारे में और पढ़ें।

3.9 टपल

टपल एक मिश्रित डेटा प्रकार है जिसमें निश्चित संख्याएँ होती हैं:

{Term1,...,TermN}

टपल में प्रत्येक पद Term को एक तत्व कहा जाता है । तत्वों की संख्या टपल के आकार की बताई जाती है।

टुपल्स में हेरफेर करने के लिए कई बीआईएफ मौजूद हैं।

उदाहरण:

1> P = {adam,24,{july,29}}.
{adam,24,{july,29}}
2> element(1,P).
adam
3> element(3,P).
{july,29}
4> P2 = setelement(2,P,25).
{adam,25,{july,29}}
5> tuple_size(P).
3
6> tuple_size({}).
0

3.10 नक्शा

एक नक्शा एक मुख्य डेटा प्रकार है जिसमें कुंजी-मूल्य संघों की एक चर संख्या होती है:

#{Key1=>Value1,...,KeyN=>ValueN}

मानचित्र में प्रत्येक की-वैल्यू एसोसिएशन को एसोसिएशन पेयर कहा जाता है। जोड़ी के प्रमुख और मूल्य भागों को तत्व कहा जाता है । एसोसिएशन जोड़े की संख्या को नक्शे का आकार कहा जाता है।

नक्शे में हेरफेर करने के लिए कई बीआईएफ मौजूद हैं।

उदाहरण:

1> M1 = #{name=>adam,age=>24,date=>{july,29}}.
#{age => 24,date => {july,29},name => adam}
2> maps:get(name,M1).
adam
3> maps:get(date,M1).
{july,29}
4> M2 = maps:update(age,25,M1).
#{age => 25,date => {july,29},name => adam}
5> map_size(M).
3
6> map_size(#{}).
0

नक्शे प्रसंस्करण कार्यों का एक संग्रह STDLIB में मैनुअल पेज में पाया जा सकता है।

Map Expressions में Map Expressions बारे में और पढ़ें।

ध्यान दें

Erlang / OTP R17 के दौरान मानचित्रों को प्रयोगात्मक माना जाता है।

3.11 सूची

एक सूची एक यौगिक डेटा प्रकार है जिसमें एक चर संख्या है।

[Term1,...,TermN]

सूची में प्रत्येक पद Term को एक तत्व कहा जाता है । तत्वों की संख्या को सूची की लंबाई कहा जाता है।

औपचारिक रूप से, एक सूची या तो खाली सूची है [] या एक सिर (पहला तत्व) और एक पूंछ (सूची के शेष) शामिल हैं। पूंछ भी एक सूची है। उत्तरार्द्ध को [H|T] रूप में व्यक्त किया जा सकता है। ऊपर दी गई सूचना [Term1,...,TermN] सूची के समतुल्य है [Term1|[...|[TermN|[]]]]

उदाहरण:

[] एक सूची है, इस प्रकार
[c|[]] इस प्रकार एक सूची है
[b|[c|[]]] इस प्रकार एक सूची है
[a|[b|[c|[]]]] एक सूची है, या संक्षेप में [a,b,c]

एक सूची जहां पूंछ कभी-कभी एक सूची होती है, कभी-कभी एक उचित सूची कहलाती है। यह एक सूची है जहां पूंछ एक सूची नहीं है, उदाहरण के लिए, [a|b] । हालांकि, इस प्रकार की सूची थोड़ा व्यावहारिक उपयोग की है।

उदाहरण:

1> L1 = [a,2,{c,4}].
[a,2,{c,4}]
2> [H|T] = L1.
[a,2,{c,4}]
3> H.
a
4> T.
[2,{c,4}]
5> L2 = [d|T].
[d,2,{c,4}]
6> length(L1).
3
7> length([]).
0

सूची प्रसंस्करण कार्यों का एक संग्रह STDLIB में lists मैनुअल पेज में पाया जा सकता है।

3.12 स्ट्रिंग

स्ट्रिंग्स डबल कोट्स (") में संलग्न हैं, लेकिन एर्लांग में डेटा प्रकार नहीं है। इसके बजाय, एक स्ट्रिंग "hello" सूची के लिए शॉर्टहैंड है [$h,$e,$l,$l,$o] , कि। , [104,101,108,108,111]

दो आसन्न स्ट्रिंग शाब्दिक एक में समाप्‍त होते हैं। यह संकलन में किया जाता है, इस प्रकार, कोई रनटाइम ओवरहेड नहीं करता है।

उदाहरण:

"string" "42"

के बराबर है

"string42"

3.13 रिकॉर्ड

एक रिकॉर्ड तत्वों की एक निश्चित संख्या को संग्रहीत करने के लिए एक डेटा संरचना है। इसने खेतों को नाम दिया है और सी में एक संरचना के समान है। हालांकि, एक रिकॉर्ड सही डेटा प्रकार नहीं है। इसके बजाय, संकलन के दौरान रिकॉर्ड अभिव्यक्तियों को टुपल अभिव्यक्तियों के लिए अनुवादित किया जाता है। इसलिए, रिकॉर्ड अभिव्यक्तियों को शेल द्वारा समझा नहीं जाता है जब तक कि विशेष क्रियाएं नहीं की जाती हैं। विवरण के लिए, shell(3) STDLIB में shell(3) मैनुअल पेज देखें।

उदाहरण:

-module(person).
-export([new/2]).

-record(person, {name, age}).

new(Name, Age) ->
    #person{name=Name, age=Age}.

1> person:new(ernie, 44).
{person,ernie,44}

रिकॉर्ड्स में रिकॉर्ड के बारे में और पढ़ें। अधिक उदाहरण Programming Examples में पाए जा सकते हैं।

3.14 बूलियन

Erlang में कोई बूलियन डेटा प्रकार नहीं है। बूलियन मूल्यों को निरूपित करने के लिए परमाणुओं के बजाय true और false का उपयोग किया जाता है।

उदाहरण:

1> 2 =< 3.
true
2> true or false.
true

3.15 बच अनुक्रम

तारों और उद्धृत परमाणुओं के भीतर, निम्नलिखित बच दृश्यों को मान्यता दी जाती है:

अनुक्रम विवरण
\ b बैकस्पेस
\ घ हटाना
\ ई पलायन
\ च फ़ीड बनाएं
\ n नई पंक्ति
\ r कैरिज रिटर्न
\ रों अंतरिक्ष
\ t टैब
\ v लंबवत टैब
\ XYZ, \ YZ, \ Z ऑक्टल प्रतिनिधित्व XYZ, YZ या Z के साथ वर्ण
\ XXY हेक्साडेसिमल प्रतिनिधित्व XY के साथ चरित्र
\ X {एक्स ...} हेक्साडेसिमल प्रतिनिधित्व के साथ चरित्र; X ... एक या एक से अधिक हेक्साडेसिमल वर्ण हैं
\ ^ एक ... \ ^ z
\ ^ एक ... \ ^ Z
Z को नियंत्रित करने के लिए A को नियंत्रित करें
\ ' एकल बोली
\ " दोहरे उद्धरण
\\ बैकस्लैश

तालिका 3.1: मान्यता प्राप्त एस्केप अनुक्रम

3.16 टाइप कन्वर्सेशन

टाइप रूपांतरण के लिए कई बीआईएफ हैं।

उदाहरण:

1> atom_to_list(hello).
"hello"
2> list_to_atom("hello").
hello
3> binary_to_list(<<"hello">>).
"hello"
4> binary_to_list(<<104,101,108,108,111>>).
"hello"
5> list_to_binary("hello").
<<104,101,108,108,111>>
6> float_to_list(7.0).
"7.00000000000000000000e+00"
7> list_to_float("7.000e+00").
7.0
8> integer_to_list(77).
"77"
9> list_to_integer("77").
77
10> tuple_to_list({a,b,c}).
[a,b,c]
11> list_to_tuple([a,b,c]).
{a,b,c}
12> term_to_binary({a,b,c}).
<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>
13> binary_to_term(<<131,104,3,100,0,1,97,100,0,1,98,100,0,1,99>>).
{a,b,c}
14> binary_to_integer(<<"77">>).
77
15> integer_to_binary(77).
<<"77">>
16> float_to_binary(7.0).
<<"7.00000000000000000000e+00">>
17> binary_to_float(<<"7.000e+00">>).
7.0