In [ ]:
#
# 나는 julia 를 사랑하는가.
#
In [ ]:
# Strings
# 문자열
In [ ]:
# Characters
# 문자
In [1]:
'x'
Out[1]:
In [2]:
typeof(ans)
Out[2]:
In [3]:
# Char 를 정수(code point)로 변환.
Int('x')
Out[3]:
In [4]:
'한'
Out[4]:
In [5]:
typeof('한')
Out[5]:
In [9]:
code_point = Int('한')
Out[9]:
In [10]:
typeof(code_point)
Out[10]:
In [11]:
# 정수를 글자로 바꾼다.
Char( code_point)
Out[11]:
In [12]:
# 정수가 유효한 Unicode code point 인가.
isvalid(Char, code_point)
Out[12]:
In [13]:
isvalid(Char, 0x110000)
Out[13]:
In [14]:
# 유니코드 한글자를 표시할때 \u 를 쓴다.
# 16진수 최대 4글자까지 쓴다.
# \U 를 쓰면 16진수 최대 8글자까지 쓸수있다.
'\u0'
Out[14]:
In [15]:
'\u78'
Out[15]:
In [16]:
'\u2200'
Out[16]:
In [17]:
'\U10ffff'
Out[17]:
In [18]:
'\u54620'
In [19]:
'\U54620'
Out[19]:
In [20]:
Char('\U54620')
Out[20]:
In [21]:
print('\U54620')
In [22]:
# C 에서 사용하는 escape character
Int('\0')
Out[22]:
In [23]:
Int('\t')
Out[23]:
In [24]:
Int('\n')
Out[24]:
In [25]:
Int('\e')
Out[25]:
In [26]:
Int('\x7f')
Out[26]:
In [27]:
Int('\177')
Out[27]:
In [28]:
Int('\xff')
Out[28]:
In [29]:
# 비교
'A' < 'a'
Out[29]:
In [30]:
'A' <= 'a' <= 'Z'
Out[30]:
In [31]:
'A' <= 'X' <= 'Z'
Out[31]:
In [32]:
'x' - 'a'
Out[32]:
In [33]:
'A' + 1
Out[33]:
In [34]:
'한' == '한'
Out[34]:
In [35]:
'가' <= '나'
Out[35]:
In [36]:
'가' <= '나' <= '다'
Out[36]:
In [37]:
'가' + 1
Out[37]:
In [56]:
char_count = 0
for i in 0:(300-1)
print("$('가' + i)")
char_count += 1
if(20 <= char_count)
print("\n")
char_count=0
end
end
In [ ]:
# String
# 문자열
# 문자열은 따옴표(")(double quote) 로 표시한다.
# 삼중 따옴표(""")(triple double quote) 도 제공한다.
In [59]:
str = "Hello, world.\n"
Out[59]:
In [58]:
"""Contains "quote" characters"""
Out[58]:
In [74]:
# 문자열에서 한글자 가져오기.
str[1]
Out[74]:
In [61]:
str[6]
Out[61]:
In [62]:
str[end]
Out[62]:
In [63]:
# end 는 되고, begin 은 안된다.
str[begin]
In [69]:
# Julia 에서 모든 indexing 은 1-base 이다.
# 0-base 가 아니다.
# index 에 0 을 쓰면 이런꼴을 보게된다.
str[0]
In [65]:
str[end-1]
Out[65]:
In [66]:
str[end÷2]
Out[66]:
In [67]:
# endof 는 된다.
endof(str)
Out[67]:
In [68]:
# beginof 는 안된다.
beginof(str)
In [70]:
# end 보다 큰값을 index 에 쓰게되면
# 이런꼴을 보게된다.
str[end+1]
In [71]:
# substring
# 부분문자열
# 문자열 일부를 추출하기.
str[4:9]
Out[71]:
In [72]:
# 글자를 리턴한다. Char
str[6]
Out[72]:
In [73]:
# 문자열을 리턴한다. String
str[6:6]
Out[73]:
In [192]:
# Unicode escape sequence \u \U 를 써서 문자열을 표현.
s = "\u2200 x \u2203"
Out[192]:
In [76]:
# UTF-8 에서
# 0x80(128) 이하는 ASCII 를 표현하며 한바이트로 표현된다.
# 0x80(128) 이상은 한글자가 여러바이트를 사용하여 표현된다.
# 한글자를 표현하기위해 최대 4bite 까지 사용된다.
# 따라서
# UTF-8 문자열의 모든 byte index 가 유효한 글자에 대응되는것은 아니라는 사실.
s[1]
Out[76]:
In [77]:
# 무효한 byte index 를 사용하면 험한꼴을 보게된다.
s[2]
In [78]:
# 무효한 byte index 를 사용하면 험한꼴을 보게된다.
s[3]
In [79]:
s[4]
Out[79]:
In [80]:
# 여기서 문자 '∀' 는 3바이트 글자인 경우다.
# 그래서 인덱스 2, 3 은 무효하다.
# 인덱스 4 는 유효하다.
# 다음 유효 인덱스가 어디인가.
nextind(s,1)
Out[80]:
In [81]:
# 그다음 유효 인덱스가 어디인가.
nextind(s,4)
Out[81]:
In [82]:
# 무효인덱스를 인자로 줘도, 적절히 작동한다.
nextind(s,2)
Out[82]:
In [83]:
nextind(s,6)
Out[83]:
In [84]:
# 몇 글자냐.
length(s)
Out[84]:
In [87]:
# 몇 바이트냐.
sizeof(s)
Out[87]:
In [193]:
# 첫번째 글자의 유효 인덱스
start(s)
Out[193]:
In [194]:
# 마지막 글자의 유효 인덱스
endof(s)
Out[194]:
In [195]:
s[7]
Out[195]:
In [196]:
s[endof(s)]
Out[196]:
In [197]:
s[end]
Out[197]:
In [199]:
s[start(s)]
Out[199]:
In [134]:
# 문자열은 자체적으로 iterator 기능을 가지고있다.
i=1
for c in s
print( "$i: ")
println( c)
i += 1
end
In [130]:
# concatenation
# 문자열 이어붙이기
greet = "Hello"
whom = "world"
string( greet, ", ", whom, ".\n")
Out[130]:
In [133]:
# 문자열을 이어붙일때
# 위와 같이 생성자(string)를 직접 호출하는것은
# 귀찮다.
# 그리고, 모양이 안이쁘다.
# 모양이 밉다.
# 미운건 안쓴다.
# Perl 언어에는
# 문자열에 $를 써서 interpolation 하는 기능이 있다.
# Julia 는 Perl 의 $ 를 가져온다.
"$greet, $whom.\n"
Out[133]:
In [135]:
"1 + 2 = $(1 + 2)"
Out[135]:
In [136]:
v = [1,2,3]
Out[136]:
In [137]:
"v: $v"
Out[137]:
In [138]:
c = 'x'
Out[138]:
In [139]:
"hi, $c"
Out[139]:
In [141]:
# 문자열에 $ 문자 자체를 넣으려면.
# \ (backslash) 로 escape 시킨다.
print("I have \$100 in my account.\n")
In [142]:
# Triple-Quoted String Literals
# 삼중 따옴표 문자열 상수
"""hello"""
Out[142]:
In [143]:
# 위 결과와 똑같다.
"""
hello"""
Out[143]:
In [144]:
# 위 결과와 똑같다.
ans == """hello"""
Out[144]:
In [148]:
# 최소로 indent 된 라인을 기준으로 indentation level 을 결정한다.
# 여기서는 Hello 를 기준으로 indentation level 을 결정한다.
str = """
Hello,
world.
"""
Out[148]:
In [147]:
# 최소로 indent 된 라인을 기준으로 indentation level 을 결정한다.
# 여기서는 마지막에 있는 닫는 """ 를 기준으로 indentation level 이 결정된다.
str = """
Hello,
world.
"""
Out[147]:
In [149]:
# 모든 문자열에서 line break 는
# newline(LF) 문자 \n 이다.
# carriage return(CR) 문자 \r 을 포함시키려면
# 명시적 escape \r 을 사용하라.
"a CRLF line ending\r\n"
Out[149]:
In [150]:
# 일반 연산자
# lexicographically compare
# 사전적 비교
# 가나다순서 비교
# ABC 순서 비교
"abracadabra" < "xylophone"
Out[150]:
In [151]:
"abracadabra" == "xylophone"
Out[151]:
In [152]:
"Hello, world." != "Goodbye, world."
Out[152]:
In [154]:
"1 + 2 = 3" == "1 + 2 = $(1 + 2)"
Out[154]:
In [165]:
str = "xylophone"
Out[165]:
In [166]:
# search
# 검색
search("xylophone", 'x')
Out[166]:
In [167]:
# 있는것.
search( str, 'p')
Out[167]:
In [168]:
# 없는것
search( str, 'z')
Out[168]:
In [169]:
subrange = search( str, "phone")
Out[169]:
In [170]:
str[5:9]
Out[170]:
In [171]:
typeof(subrange)
Out[171]:
In [173]:
str[subrange]
Out[173]:
In [174]:
typeof(subrange)
Out[174]:
In [176]:
# range 가 함수로 정의되어있다.
# 이것을 변수명으로 쓰면, shadowing 이 발생한다.
typeof(range)
Out[176]:
In [180]:
search( "xylophone", 'o')
search( str, 'o')
Out[180]:
In [178]:
# 검색 시작 위치를 지정하는 기능.
# 이것이 어디에 쓰는 물건인지.
# 쓰면 무엇이 좋은지.
# 지금은 궁금하지 않다.
# 이런 기능이 존재한다는 사실만 존재한다.
search( str, 'o', 5)
Out[178]:
In [179]:
search( str, 'o', 8)
Out[179]:
In [182]:
# 시작위치를 지정할때
# 범위를 벗어나면 험한꼴을 보게된다.
search( str, 'o', 1000)
In [183]:
# contains
# 있냐
contains("Hello, world.", "world")
Out[183]:
In [185]:
contains("Xylophone", "a")
Out[185]:
In [184]:
# 이건 된다.
contains("Xylophone", "o")
Out[184]:
In [186]:
# 이건 안된다.
contains("Xylophone", 'o')
In [187]:
# 존재여부 검사
# contains 로 안되면 이걸 써라.
in( 'o', "Xylophone")
Out[187]:
In [188]:
# repeat()
# join()
# 반복
# 연결
repeat("abc ", 10)
Out[188]:
In [237]:
# 모든것을 구분자(", ")로 interpolation
join(["사과", "바나나", "포도", "파인애플"], ", ")
Out[237]:
In [239]:
# 모든것을 구분자(", ")로 interpolation 하고,
# 마지막엔 다른 구분자를 사용.
join(["사과", "바나나", "포도", "파인애플"], ", ", " 그리고 ")
Out[239]:
In [227]:
s = "Hello world."
Out[227]:
In [228]:
i = start(s)
while( i <= endof(s))
c, j = next(s, i)
i = j
println( "$c : $j")
end
In [229]:
s = "밥은 먹고 다니냐."
Out[229]:
In [230]:
s[4]
Out[230]:
In [231]:
start(s)
Out[231]:
In [232]:
endof(s)
Out[232]:
In [233]:
s[start(s)]
Out[233]:
In [234]:
s[endof(s)]
Out[234]:
In [235]:
i = start(s)
while( i <= endof(s))
c, j = next(s, i)
i = j
println( "$c : $j")
end
In [240]:
for c in s
println( c)
end
In [241]:
# Regular Expressions
# 정규 표현식
r"^\s*(?:#|$)"
Out[241]:
In [242]:
typeof(ans)
Out[242]:
In [243]:
ismatch(r"^\s*(?:#|$)", "not a comment")
Out[243]:
In [244]:
ismatch(r"^\s*(?:#|$)", "# a comment")
Out[244]:
In [245]:
match(r"^\s*(?:#|$)", "not a comment")
In [246]:
match(r"^\s*(?:#|$)", "# a comment")
Out[246]:
In [250]:
# 아무것도 리턴하지 않은것을
# nothing 으로 검사한다.
line = "not a comment"
m = match(r"^\s*(?:#|$)", line)
if m == nothing
println("주석이 아니다")
else
println("공백 또는 주석이다")
end
In [251]:
m = match(r"^\s*(?:#\s*(.*?)\s*$|$)", "# a comment")
Out[251]:
In [252]:
# 검색 시작위치 지정
m = match(r"[0-9]", "aaaa1aaaa2aaaa3", 1)
Out[252]:
In [253]:
m = match(r"[0-9]", "aaaa1aaaa2aaaa3", 6)
Out[253]:
In [254]:
m = match(r"[0-9]", "aaaa1aaaa2aaaa3", 11)
Out[254]:
In [255]:
fieldnames(m)
Out[255]:
In [256]:
m.match
Out[256]:
In [257]:
m.captures
Out[257]:
In [258]:
m.offset
Out[258]:
In [259]:
m.offsets
Out[259]:
In [260]:
m.regex
Out[260]:
In [261]:
# 이름으로
m=match(r"(?P<hour>\d+):(?P<minute>\d+)", "12:45")
Out[261]:
In [263]:
# 이름으로
m[:hour]
Out[263]:
In [264]:
# 이름으로
m[:minute]
Out[264]:
In [265]:
# 인덱스로
m[1]
Out[265]:
In [266]:
# 인덱스로
m[2]
Out[266]:
In [268]:
replace("first second", r"(\w+) (?P<agroup>\w+)", s"\g<agroup> \1")
Out[268]:
In [269]:
replace("a", r".", s"\g<0>1")
Out[269]:
In [270]:
# flag : i, m, s, x
# i : case-Insensitive pattern matching
# m : treat string as multiple lines
# s : treat string as single line
# x : ignore most whitespace
r"a+.*b+.*?d$"ism
Out[270]:
In [271]:
match(r"a+.*b+.*?d$"ism, "Goodby,\nOh, angry,\nBad world\n")
Out[271]:
In [272]:
# Byte Array Literals
# 바이트 배열 상수
# 이것은 UInt8 타입의 배열이다.
# 이것은 UTF-8 이 아니다.
b"DATA\xff\u2200"
Out[272]:
In [273]:
b"\xff"
Out[273]:
In [274]:
b"\uff"
Out[274]:
In [275]:
# Version Number Literals
# 버전 번호 상수
VERSION
Out[275]:
In [276]:
if v"0.2" < VERSION < v"0.3-"
println( "버전 0.2 에 해당하는 기능 처리")
end
In [277]:
v = VERSION
Out[277]:
In [278]:
typeof(v)
Out[278]: