翻蚳è
ããã®ã¡ã¢ãã®ç¿»èš³ã¯ã
stas3kããã®
ã³ã¡ã³ãã«åºã¥ããŠè¡ããããã®ã§ãNimãã¥ãŒããªã¢ã«ã®2ã€ã®éšåã翻蚳ããããã«ææ¡ã
ãŸããã ããã¯ç§ã«èå³ããããç§ãçè§£ããéãã§ã¯ãç§ã¯ããããèªåã§ç¿»èš³ããŸããã 誰ããééããèŠã€ããå ŽåïŒããããããã«ãããŸã-æåŸã«ç®ãå®å
šã«æ¶ããŸããïŒãPMã§ç¥ãããŠãã ãããç§ã¯ç·šéããŸãã
ã¯ããã«
ãDen Mensch ist doch ein Augentier-ã·ã§ãŒã³ã»ãã£ã³ã²ã»ãŽã³ã·ã¥ã»ã€ãã»ããŒã«ãã
ïŒã°ã«ãŒããã©ã ã·ã¥ã¿ã€ã³ãã®æãã¢ã«ã²ã³ã·ã¥ãã«ã³ãããã®åŒçšãããããã®ç¿»èš³ïŒããããã人éã¯å€§ããªç®ãããç£ã§ããç§ã«ã¯ããããã®çŸãããã®ãå¿
èŠã§ãããïŒããã¯ã
Nimããã°ã©ãã³ã°èšèªã®ãã¥ãŒããªã¢ã«ã§ã
ã 倿°ãåãã³ãã³ããªã©ã®åºæ¬çãªããã°ã©ãã³ã°æŠå¿µã«ç²ŸéããŠããããšãåæãšããŠããŸããã詳现ãªç¥èã¯å¿
èŠãããŸããã èšèªã®è€éãªãã¥ã¢ã³ã¹ã«é¢ãã倿°ã®äŸã«ã€ããŠã¯ãå
¬åŒã¬ã€ããã芧ãã ããã ãã®ããã¥ã¡ã³ãã®ãã¹ãŠã®ã³ãŒãäŸã¯
ãNimã¹ã¿ã€ã«ã¬ã€ãã«åŸã£
ãŠããŸããæåã®ããã°ã©ã
倿Žãããhello worldããã°ã©ã ããå§ããŸãããã
ãã®ã³ãŒãã
greetings.nim
ãã¡ã€ã«ã«ä¿åããŸãã ã³ã³ãã€ã«ããŠå®è¡ããŸãã
nim compile --run greetings.nim
--run
ã«ãããNimã¯ã³ã³ãã€ã«åŸã«ãã¡ã€ã«ãèªåçã«å®è¡ããŸãã ãã¡ã€ã«åã®åŸã«åŒæ°ã远å ããããšã«ãããã³ãã³ãã©ã€ã³çµç±ã§ããã°ã©ã ã«åŒæ°ãæž¡ãããšãã§ããŸãã
nim compile --run greetings.nim arg1 arg2
äžè¬çã«äœ¿çšãããã³ãã³ããšããŒã«ã¯ç¥èªããããããæ¬¡ã®ããã«èšè¿°ã§ããŸãã
nim c -r greetings.nim
ãªãªãŒã¹ããŒãžã§ã³ãã³ã³ãã€ã«ããã«ã¯ã次ã®ã³ãã³ãã䜿çšããŸãã
nim c -d:release greetings.nim
ããã©ã«ãã§ã¯ãNimã³ã³ãã€ã©ã¯å€ãã®ã©ã³ã¿ã€ã ãã§ãã¯ãçæããŠãããã°ãç°¡çŽ åããŸãã
-d:release
ã¹ã€ããã¯ããããã®ãã§ãã¯ãç¡å¹ã«ããæé©åãæå¹ã«ããŸãã
ããã°ã©ã ã®åäœã¯ããªãæçœãªã¯ãã§ãããæ§æã説æããŸããã€ã³ãã³ããªãã§èšè¿°ãããã³ãã³ãã¯ãããã°ã©ã ã®èµ·åæã«å®è¡ãããŸãã ã€ã³ãã³ãNimã°ã«ãŒãããŒã ã ã€ã³ãã³ãã¯ã¹ããŒã¹ã®ã¿ã§ãã¿ãã¯äœ¿çšã§ããŸããã
æååãªãã©ã«ã¯äºéåŒçšç¬Šã§å²ã¿ãŸãã
var
ã³ãã³ãã¯ãååã
name
ã§ã¿ã€ãã
string
æ°ãã倿°ã宣èšã
string
ããã®åŸã
readLine
ããã·ãŒãžã£ã«ãã£ãŠè¿ãããå€ãå²ãåœãŠãããŸãã ã³ã³ãã€ã©ã¯
readLine
ãæååãè¿ãããšãç¥ã£ãŠããããã宣èšã«åãèšè¿°ããå¿
èŠã¯ãããŸããïŒããã¯ããŒã«ã«åæšè«ãšåŒã°ããŸãïŒã ãããã£ãŠããã®ãªãã·ã§ã³ãæ©èœããŸãã
var name = readLine(stdin)
ããã¯ãNimã§èŠãããåæšè«ã®ã»ãšãã©å¯äžã®åœ¢åŒã§ããããšã«æ³šæããŠãã ãããããã¯ãç°¡æœããšèªã¿ãããã®éã®è¯ã劥åç¹ã§ãã
hello worldããã°ã©ã ã«ã¯ãã³ã³ãã€ã©ãŒã«æ¢ã«ç¥ãããŠããããã€ãã®èå¥åïŒ
echo
ã
readLine
ãªã©ïŒãå«ãŸããŠããŸãã ãããã®çµã¿èŸŒã¿ã³ãã³ãã¯ãä»ã®ã¢ãžã¥ãŒã«ã«ãã£ãŠæé»çã«ã€ã³ããŒãããã
system
ã¢ãžã¥ãŒã«ã§å®£èšãããŸãã
åå¥èŠçŽ
Nimã®åå¥èŠçŽ ãããè©³çŽ°ã«æ€èšããŠãã ããã ä»ã®ããã°ã©ãã³ã°èšèªãšåæ§ã«ãNimã¯ãªãã©ã«ãèå¥åãããŒã¯ãŒããã³ã¡ã³ããæŒç®åãå¥èªç¹ã§æ§æãããŠããŸãã
æååãšæåãªãã©ã«
æååãªãã©ã«ã¯äºéåŒçšç¬Šã§å²ãŸããŠããŸãã ã·ã³ããªãã¯-ã·ã³ã°ã«ãžã ç¹æ®æåã¯ããã¯ã¹ã©ãã·ã¥
\
ãšã¹ã±ãŒããããŸãã
\n
ã¯æ¹è¡ã
\t
ã¯ã¿ããªã©ãæå³ããŸãã çã®æååãªãã©ã«ããããŸãã
r"C:\program files\nim"
çã®ãªãã©ã«ã§ã¯ãããã¯ã¹ã©ãã·ã¥ã¯ãšã¹ã±ãŒãæåã§ã¯ãããŸããã
æååãªãã©ã«ãèšè¿°ããæåŸã®3çªç®ã®æ¹æ³ã¯ã
é·ãæååãªãã©ã«ã§ãã ãããã¯ãäžéåŒçšç¬Šã§å²ãŸããŠããŸãïŒ
""" ... """
ãæ¹è¡ãå«ãŸããŠããå Žåãããã
\
ã¯ãšã¹ã±ãŒãæåã§ã¯ãããŸããã ããšãã°ãã³ãŒãã«HTMLãã©ã°ã¡ã³ããå«ããå Žåã«éåžžã«äŸ¿å©ã§ãã
ã³ã¡ã³ã
ã³ã¡ã³ãã¯ãæååãŸãã¯æåãªãã©ã«ã®å€åŽã®ä»»æã®å Žæã«çœ®ãããšãã§ãããã³ãèšå·
#
å§ãŸããŸãã ããã¥ã¡ã³ãã®ã³ã¡ã³ãã¯
##
å§ãŸããŸãïŒ
ããã¥ã¡ã³ãã³ã¡ã³ãã¯ããŒã¯ã³ã§ãããæ§æããªãŒã«å«ãŸããŠãããããå
¥åãã¡ã€ã«ã®ç¹å®ã®å Žæã§ã®ã¿èŠã€ããããšãã§ããŸãïŒ ããã«ãããããã¥ã¡ã³ããžã§ãã¬ãŒã¿ãŒãç°¡çŽ åãããŸãã
é·ãæååãªãã©ã«ã§ discard
ã³ãã³ãã䜿çšããŠããããã¯ã³ã¡ã³ããäœæããããšãã§ããŸãã
discard """ Nim - . yes("May I ask a pointless question?") """
æ°å
æ°å€ãªãã©ã«ã¯ãä»ã®ã»ãšãã©ã®èšèªãšåãæ¹æ³ã§èšè¿°ãããŸãã èªã¿ãããããããã«ãæ°åãã¢ã³ããŒã¹ã³ã¢ã§
1_000_000
ããšãã§ããŸãïŒ
1_000_000
ïŒ100äžïŒã ããªãªãïŒ
e
ãŸãã¯
E
ããããïŒãå«ãæ°å€ã¯ãæµ®åå°æ°ç¹æ°ã®ãªãã©ã«ãšèŠãªãããŸãïŒ
1.0e9
ïŒ10åïŒã 16é²ãªãã©ã«ã¯ãã¬ãã£ãã¯ã¹
0x
ã§å§ãŸãããã€ããªã¯
0b
ã§ã8鲿°ã¯
0o
å§ãŸããŸãã å
è¡ãŒã
ã¯ ãæ°å€ã8鲿°ã«å€æ
ããŸãã ã
var
ã³ãã³ã
var
ã³ãã³ãã¯ãæ°ããããŒã«ã«å€æ°ãŸãã¯ã°ããŒãã«å€æ°ã宣èšããŸãã
var x, y: int
var
ããŒã¯ãŒãã®åŸã«ââã€ã³ãã³ãã䜿çšãããšã倿°ã®ã»ã¯ã·ã§ã³å
šäœããªã¹ãã§ããŸãã
var x, y: int
å²ãåœãŠã³ãã³ã
å²ãåœãŠã³ãã³ãã¯ã倿°ã«ãããäžè¬çã«ã¯ä¿åå Žæã«æ°ããå€ãå²ãåœãŠãŸãã
var x = "abc"
=
ããã¯
代å
¥æŒç®åã§ãã ãªãŒããŒããŒããæžãæãããŸãã¯çŠæ¢ãããŠããªãå¯èœæ§ããããŸãããããã¯Nimã®å°æ¥ã®ããŒãžã§ã³ã§å€æŽãããå¯èœæ§ããããŸãã 1ã€ã®ä»£å
¥æŒç®åã§è€æ°ã®å€æ°ã宣èšã§ãããããã¯ãã¹ãŠåãå€ãååŸããŸãã
var x, y = 3
ããã·ãŒãžã£ãåŒã³åºãåäžã®å²ãåœãŠã§è€æ°ã®å€æ°ã宣èšãããšãäºæããªãçµæãçããå¯èœæ§ãããããšã«æ³šæããŠãã ãããã³ã³ãã€ã©
ã¯å²ãåœãŠ
ãæ¡åŒµã ãæçµçã«æ°åããã·ãŒãžã£ãåŒã³åºããŸãã ããã·ãŒãžã£ã®çµæãå¯äœçšã«äŸåããå Žåã倿°ã¯ç°ãªãå€ãååŸã§ããŸãïŒ ãããåé¿ããã«ã¯ã宿°å€ã®ã¿ã䜿çšããŸãã
宿°
宿°ã¯ãå€ã«é¢é£ä»ããããæåã§ãã 宿°ã®å€ã¯å€æŽã§ããŸããã ã³ã³ãã€ã©ã¯ãã³ã³ãã€ã«æã«å®æ°å®£èšã®åŒãè©äŸ¡ã§ããå¿
èŠããããŸãã
const x = "abc"
const
ããŒã¯ãŒãã®åŸã«ââã€ã³ãã³ãã䜿çšãããšã宿°ã®ã»ã¯ã·ã§ã³å
šäœããªã¹ãã§ããŸãã
const x = 1
let
ã³ãã³ã
let
ã³ãã³ãã¯
var
ãšã»ãšãã©åãããã«æ©èœããŸããã
åäžå²ãåœãŠå€æ°ã宣èšããŸã
ãåæååŸããããã®å€ã¯å€æŽã§ããŸããã
let x = "abc"
let
ãš
const
ã®éã
const
次ã®ãšããã§ã
const
åå²ãåœãŠã§ããªã倿°ãå°å
¥ãã
const
ã¯ãã³ã³ãã€ã«æã«ã³ã³ãã€ã«ã匷å¶ããçµæãããŒã¿ã»ã¯ã·ã§ã³ã«é
眮ãããããšãæå³ããŸãã
const input = readLine(stdin)
let input = readLine(stdin)
ãããŒå¶åŸ¡ã³ãã³ã
ãŠã§ã«ã«ã ããã°ã©ã ã«ã¯ãé çªã«å®è¡ããã3ã€ã®ã³ãã³ããå«ãŸããŠããŸãã ãããããã®æ¹æ³ã§åäœã§ããã®ã¯æãåå§çãªããã°ã©ã ã ãã§ãããããã«è€éãªããã°ã©ã ã§ã¯ã«ãŒããšãã©ã³ããå¿
èŠã§ãã
if
ã³ãã³ã
if
ã³ãã³ãã¯ãå®è¡ã®ã¹ã¬ãããåå²ãã1ã€ã®æ¹æ³ã§ãã
let name = readLine(stdin) if name == "": echo("Poor soul, you lost your name?") elif name == "name": echo("Very funny, your name is name.") else: echo("Hi, ", name, "!")
elif
ãã©ã³ãã¯ãŒã以äžã«ããããšãã§ãã
else
ãã©ã³ãã¯ãªãã·ã§ã³ã§ãã
elif
ããŒã¯ãŒãã¯ãäžå¿
èŠã«ã€ã³ãã³ãããªã
else if
ã
else if
çç¥åœ¢ã§ãã ïŒ
""
ã¯ç©ºã®æååã§ãæåã¯å«ãŸããŸãããïŒ
case
ã³ãã³ã
å¥ã®å岿¹æ³ã¯ã
case
ã³ãã³ãã«ãã£ãŠå®è£
ãããŸãã å®è¡ã¹ã¬ãããããã€ãã®ãã©ã³ãã«åå²ããŸãã
let name = readLine(stdin) case name of "": echo("Poor soul, you lost your name?") of "name": echo("Very funny, your name is name.") of "Dave", "Frank": echo("Cool name!") else: echo("Hi, ", name, "!")
ã芧ã®ãšãããã³ã³ãã§åºåãããå€ã®ãªã¹ããofã®åŒæ°ãšããŠäœ¿çšã§ããŸãã
case
ã³ãã³ãã¯ãæŽæ°ããã®ââä»ã®åæåãããã³æååãåŠçã§ããŸãã ïŒåæåã«ã€ããŠã¯åŸã§èª¬æããŸããïŒæŽæ°ããã³åæåã®å Žåãå€ã®ç¯å²ã䜿çšã§ããŸãã
ãã ããäžèšã®ã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã çç±ã¯ã
n
ãåãåŸã
ãã¹ãŠã®å€ãã«ããŒããå¿
èŠããããã³ãŒãã¯å€
0..8
ã®ã¿ãåŠçããããã§ãã ãã¹ãŠã®å¯èœãªæŽæ°ããªã¹ãããããšã¯ããŸãå®çšçã§ã¯ãªãã®ã§ïŒããã¯ç¯å²è¡šèšã®ããã«å¯èœã§ããïŒãä»ã®ãã¹ãŠã®å€ã«å¯ŸããŠäœãããå¿
èŠããªãããšãã³ã³ãã€ã©ã«äŒããããšã§ãããä¿®æ£ããŸãã
... case n of 0..2, 4..7: echo("The number is in the set: {0, 1, 2, 4, 5, 6, 7}") of 3, 8: echo("The number is 3 or 8") else: discard
空ã®
discard
ã³ãã³ãã¯ã
äœãããªãã³ãã³ã
ã§ãã ã³ã³ãã€ã©ãŒã¯ã
else
ã»ã¯ã·ã§ã³ã®
case
ã³ãã³ãããã¹ãŠã®å¯èœãªãªãã·ã§ã³ãã«ããŒããŠããããããšã©ãŒãæ¶ããããšãèªèããŠããŸãã ãã¹ãŠã®æååå€ãã«ããŒããããšã¯äžå¯èœã§ããããšã«æ³šæããŠãã ããïŒæååã®å Žåã
else
ãã©ã³ããå¿
èŠã§ãã
äžè¬ã«ã
case
ã³ãã³ãã¯ãåãŸãã¯åæã®ç¯å²ã«äœ¿çšãããŸãããã®
case
ãã³ã³ãã€ã©ããã¹ãŠã®å¯èœãªå€ã®ã«ãã¬ããžããã§ãã¯ããã®ã«åœ¹ç«ã¡ãŸãã
while
ã³ãã³ã
while
ã³ãã³ãã¯åçŽãªã«ãŒãã§ãïŒ
echo("What's your name? ") var name = readLine(stdin) while name == "": echo("Please tell me your name: ") name = readLine(stdin)
ãã®äŸã§ã¯ã
while
䜿çšããŠããŠãŒã¶ãŒãEnterããŒãæŒãïŒã€ãŸããç©ºã®æååãå
¥åããªãïŒãŸã§ãŠãŒã¶ãŒã«ååãå°ããŸãã
ã³ãã³ãçš
for
ã³ãã³ãã¯ãå埩åã®ãã¹ãŠã®èŠçŽ ã§ã«ãŒããå®è£
ããŸãã çµã¿èŸŒã¿ã®
countup
ã¢ããã€ãã¬ãŒã¿ã®äœ¿çšäŸã次ã«ç€ºããŸãã
echo(" : ") for i in countup(1, 10): echo($i)
çµã¿èŸŒã¿ã®
$
æŒç®åã¯ãæŽæ°ïŒ
int
ïŒããã³ãã®ä»ã®å€ãã®åãæååã«å€æããŸãã 倿°
i
for
ã«ãŒãã«ãã£ãŠæé»çã«å®£èšãããå
int
ã§ããããã¯ã
countup
ãæ£ç¢ºã«ãã®åãè¿ãããã§ãã
i
ã¯å€1ã2ã..ã10ãééããŸããåå€ã¯
echo
ã䜿çšããŠè¡šç€ºãããŸãã ãã®ã³ãŒãã¯åãããšãè¡ããŸãïŒ
echo(" 10: ") var i = 1 while i <= 10: echo($i) inc(i)
ã«ãŠã³ãããŠã³ãåæ§ã«ç°¡åã«å®è£
ã§ããŸãïŒããã»ã©é »ç¹ã«ã¯å¿
èŠãããŸããïŒïŒ
echo(" 10 1: ") for i in countdown(10, 1): echo($i)
æ¡å€§ã§ã®ã«ãŠã³ãã¯ããã°ã©ã ã§ãã䜿çšããããããNimã«ã¯ã€ãã¬ãŒã¿ããããŸã
..
ããã¯
countup
ãšåãããšãè¡ããŸã
..
for i in 1..10: ...
ã¹ã³ãŒããšblock
ã³ãã³ã
ãããŒå¶åŸ¡ããŒã ã«ã¯ããŸã 説æãããŠããªãæ©èœããããŸããæ°ããã¹ã³ãŒããéãããŸãã ããã¯ã次ã®äŸã§
x
ãã«ãŒãã®å€åŽã§
x
䜿çšã§ããªãããšãæå³ããŸãã
while false: var x = "hi" echo(x)
while
ïŒ
for
ïŒã³ãã³ãã¯ãæé»çãªãããã¯ãäœæããŸãã èå¥åã¯ã宣èšããããããã¯å
ã§ã®ã¿è¡šç€ºãããŸãã
block
ã³ãã³ãã䜿çšããŠãæ°ãããããã¯ãæç€ºçã«éãããšãã§ããŸãã
block myblock: var x = "hi" echo(x)
ãããã¯
ã©ãã« ïŒãã®äŸã§ã¯
myblock
ïŒã¯ãªãã·ã§ã³ã§ãã
break
ã³ãã³ã
break
ã³ãã³ãã䜿çšããŠãäºåã«ãããã¯ãçµäºã§ããŸãã ãã®ã³ãã³ãã¯ã
while
ã
for
ãŸãã¯
block
ã³ãã³ããããã¯
for
äžæã§ããŸãã çµäºãããããã¯ã®ã©ãã«ãæå®ãããŠããªãå Žåãæãè¿ããããã¯ãçµäºããŸãã
block myblock: echo(" ") while true: echo("") break
continue
ã³ãã³ã
ä»ã®å€ãã®ããã°ã©ãã³ã°èšèªãšåæ§ã«ã
continue
ã³ãã³ãã¯æ¬¡ã®å埩ã«ããã«é²ã¿ãŸãã
while true: let x = readLine(stdin) if x == "": continue echo(x)
when
ã³ãã³ã
äŸïŒ
when system.hostOS == "windows": echo("running on Windows!") elif system.hostOS == "linux": echo("running on Linux!") elif system.hostOS == "macosx": echo("running on Mac OS X!") else: echo("unknown operating system")
when
ã³ãã³ãã¯
if
ã³ãã³ããšã»ãšãã©åãã§ãããããã€ãã®éãããããŸãã
- èšç®ãããããã忡件ã¯å®æ°åŒã§ãªããã°ãªããŸããã
- ãã©ã³ãå
ã®ããŒã ã¯æ°ããã¹ã³ãŒããéããŸãã
- ã³ã³ãã€ã©ãŒã¯æ§æããã§ãã¯ãã
true
ãè¿ããæåã®æ¡ä»¶ã«åŸã£ãŠãã©ã³ãã«å±ããã³ãã³ãã®ã¿ã®ã³ãŒããçæãtrue
ã
when
ã³ãã³ãã¯ã
#ifdef
Cèšèªã«äŒŒããã©ãããã©ãŒã åºæã®ã³ãŒããäœæããã®ã«åœ¹ç«ã¡ãŸãã
泚 ïŒå€§éã®ã³ãŒããã³ã¡ã³ãã¢ãŠãããã«ã¯ãã³ã¡ã³ãã®ä»£ããã«when false:
ã³ã³ã¹ãã©ã¯ãã䜿çšããæ¹ã䟿å©ãªwhen false:
ãããŸãã ç¹°ãè¿ããã¹ãããããšãã§ããŸãã
ã³ãã³ããšã€ã³ãã³ã
åºæ¬çãªãããŒå¶åŸ¡ã³ãã³ãã«ã€ããŠèª¬æããã®ã§ãNimã®ã€ã³ãã³ãã«ãŒã«ã«æ»ããŸãããã
Nimã§ã¯ã
åçŽ ãªã³ãã³ããš
è€éãªã³ãã³ããåºå¥ããŠã
ãŸãã å²ãåœãŠãããã·ãŒãžã£ã³ãŒã«ã
return
ãªã©ã®
åçŽãªã³ãã³ãã«ä»ã®ã³ãã³ããå«ããããšã¯ã§ããŸããã
if
ã
when
ã
for
ã
while
ãªã©ã®
è€éãªã³ãã³ãã«ã¯ãä»ã®ã³ãã³ããå«ããããšãã§ããŸãã ãããŸãããé¿ãããããè€éãªã³ãã³ãã¯åžžã«ã€ã³ãã³ããããŸãããåçŽãªã³ãã³ãã¯ããã§ã¯ãããŸããã
éåžžäœããã®æå³ãããããã³ãã³ãã®éšåã¯ã
åŒãšåŒã°ã
ãŸãã èªã¿ãããããããã«ãç¹å®ã®å Žæã«ã€ã³ãã³ããå«ããããšãã§ããŸãã
if thisIsaLongCondition() and thisIsAnotherLongCondition(1, 2, 3, 4): x = true
ã€ãŸããåŒã®åŸã®ã€ã³ãã³ãã¯ãæŒç®åã®åŸãè§ãã£ãã®åŸãããã³ã³ã³ãã®åŸã«èš±å¯ãããŸãã
æ¬åŒ§ãšã»ãã³ãã³ïŒ
;
ïŒã䜿çšãããšãåŒã®ã¿ãèš±å¯ãããŠããã³ãã³ãã䜿çšã§ããŸãã
æç¶ã
äŸãã
echo
ã
readLine
ãªã©ã®æ°ããã³ãã³ããäœæããã«ã¯ã
ããã·ãŒãžã£ã®æŠå¿µã
å¿
èŠã§ãã ïŒäžéšã®èšèªã§ã¯ã
ã¡ãœãããŸãã¯
颿°ãšåŒã°ã
ãŸããïŒ Nimã§ã¯ã
proc
ããŒã¯ãŒãã䜿çšããŠæ°ããããã·ãŒãžã£ãå®çŸ©ãããŸãã
proc yes(question: string): bool = echo(question, " (y/n)") while true: case readLine(stdin) of "y", "Y", "yes", "Yes": return true of "n", "N", "no", "No": return false else: echo("Please be clear: yes or no") if yes("Should I delete all your important files?"): echo("I'm sorry Dave, I'm afraid I can't do that.") else: echo("I think you know what the problem is just as well as I do.")
ãã®äŸã¯ã
yes
ãšåŒã°ããããã·ãŒãžã£ã瀺ããŠããŸãããã®ããã·ãŒãžã£ã¯ããŠãŒã¶ãŒã«è³ªåããyesãšçããå Žåã¯
true
ãè¿ããnoãšçããå Žåã¯
false
ãè¿ã
true
ã
return
ã³ãã³ãã¯ãããã·ãŒãžã£ïŒããã³ãããã«å¿ããŠ
while
ïŒãçŽã¡ã«çµäºããŸãã æ§æ
(question: string): bool
ã¯ãããã·ãŒãžã£ãŒã
question
ãšããååã®ãã©ã¡ãŒã¿ãŒãååŸãã
string
åãååŸãã
bool
åã®å€ãè¿ãããšãæå³ããŸãã
bool
ã¯çµã¿èŸŒã¿åã§ãã䜿çšã§ããå€ã¯
true
ãš
false
ã®ã¿ã§ãã
if
ãŸãã¯
while
ã³ãã³ãã®æ¡ä»¶ã¯
bool
åã§ãªããã°ãªããŸããã
ã¡ãã£ãšããçšèªïŒãã®äŸã§
question
ã
question
æ£åŒã«
ãã©ã¡ãŒã¿ãŒãšåŒã°ãã
"Should I..."
ã¯ãã®ãã©ã¡ãŒã¿ãŒã§æž¡ããã
åŒæ°ãšåŒã°ããŸãã
çµæå€æ°
å€ãè¿ãããã·ãŒãžã£ã§ã¯ãæ»ãå€ã衚ã
result
倿°ãæé»çã«å®£èšãããŸãã åŒæ°ãªãã®
return
ã³ãã³ãã¯ãåã«
return result
çç¥åœ¢ã§ãã
result
倿°ã¯ã
return
ã³ãã³ãããªããŠããããã·ãŒãžã£ã®çµäºæã«åžžã«è¿ãããŸãã
proc sumTillNegative(x: varargs[int]): int = for i in x: if i < 0: return result = result + i echo sumTillNegative()
颿°ã®éå§æã«ã¯ã
result
倿°ã¯åžžã«ãã§ã«å®£èšãããŠãããããããšãã°
var result
ã䜿çšããŠå床宣èšããããšãããšãåãååã®éåžžã®å€æ°ãäžæçã«ãªããŸãã
result
倿°ã¯ãåžžã«ãã®ã¿ã€ãã®ããã©ã«ãå€ã«åæåãããŸãã ãããã£ãŠãåç
§ãããããŒã¿åã¯
nil
ã«ãªããããå¿
èŠã«å¿ããŠæåã§åæåããå¿
èŠããããŸãã
ãã©ã¡ãŒã¿
ããã·ãŒãžã£ã®æ¬äœã§ã¯ããã©ã¡ãŒã¿ã¯å®æ°ã§ãã ããã©ã«ãã§ã¯å€æŽã§ããªããããããã«ããã³ã³ãã€ã©ãŒã¯ãã©ã¡ãŒã¿ãŒã®åãæž¡ããæãå¹ççãªæ¹æ³ã§å®è£
ã§ããŸãã ããã·ãŒãžã£å
ã§å€æ°ãå¿
èŠãªå Žåã
var
ã䜿çšããŠããã·ãŒãžã£ã®æ¬äœã§å€æ°ã宣èšããå¿
èŠããããŸãã ãã©ã¡ãŒã¿åã®ã·ã§ãŒãã£ã³ã°ãå¯èœã§ãããæã
䜿çšãããŸãïŒ
proc printSeq(s: seq, nprinted: int = -1) = var nprinted = if nprinted == -1: s.len else: min(nprinted, s.len) for i in 0 .. <nprinted: echo s[i]
ããã·ãŒãžã£ãåŒã³åºãåŽã«æž¡ãããåŒæ°ã倿Žããå¿
èŠãããå Žåã
var
ãã©ã¡ãŒã¿ãŒã䜿çšã§ããŸãã
proc divmod(a, b: int; res, remainder: var int) = res = a div b
ãã®äŸã§ã¯ã
res
ãš
remainder
ã¯
var
ãã©ã¡ãŒã¿ãŒã§ãã ãã®ãããªãã©ã¡ãŒã¿ã¯ããã·ãŒãžã£ã«ãã£ãŠå€æŽã§ãã倿Žã¯åŒã³åºãå
ã«èŠããããã«ãªããŸãã äžèšã®äŸã§ã¯ã
var
ãã©ã¡ãŒã¿ã®ä»£ããã«ãã¿ãã«ãè¿ãæ¹ãè¯ãããšã«æ³šæããŠãã ããã
ããŒã ãdiscard
å€ãè¿ãããã·ãŒãžã£ãåŒã³åºãããã®åŒã³åºãã®çµæãç¡èŠããã«ã¯ã
discard
ã³ãã³ãã䜿çš
ããå¿
èŠããããŸãã Nimã§ã¯ãæ»ãå€ãååŸããŠç Žæ£ããããšã¯ã§ããŸããã
discard yes(" ?")
åŒã³åºãããããã·ãŒãžã£ãŸãã¯ã€ãã¬ãŒã¿ã
discardable
ãã©ã°ãã§å®£èšãããå Žåãæ»ãå€ã¯æé»çã«ç¡èŠã§ããŸãã
proc p(x, y: int): int {.discardable.} = return x + y p(3, 4)
ã³ã¡ã³ãã»ã¯ã·ã§ã³ã§èª¬æãããŠããããã«ã
discard
ã³ãã³ãã䜿çšããŠã³ã¡ã³ããããã¯ãäœæããããšãã§ããŸãã
ååä»ãåŒæ°
ããã·ãŒãžã£ã«ã¯å€ãã®ãã©ã¡ãŒã¿ãããããããã®é åºãèŠããã®ã¯å°é£ã§ãã ããã¯ç¹ã«ãè€éãªããŒã¿åãæ§ç¯ããããã·ãŒãžã£ã«åœãŠã¯ãŸããŸãã ãã®ãããªå Žåãã©ã®åŒæ°ãã©ã®ãã©ã¡ãŒã¿ãŒã«å¯Ÿå¿ããããããæç¢ºã«ãªãããã«ãããã·ãŒãžã£ãŒã®åŒæ°ã«ååãä»ããããšãã§ããŸãã
proc createWindow(x, y, width, height: int; title: string; show: bool): Window = ... var w = createWindow(show = true, title = "My Application", x = 0, y = 0, height = 600, width = 800)
createWindow
ãåŒã³åºãããã«ååä»ãåŒæ°ã䜿çšããã®ã§ãåŒæ°ã®é åºã¯
createWindow
ã§ã¯ãªããªããŸããã ååä»ãåŒæ°ãšååãªãåŒæ°ãæ··åšãããããšãã§ããŸãããããã¯èªã¿ãããã«åœ±é¿ããŸãã
var w = createWindow(0, 0, title = "My Application", height = 600, width = 800, true)
ã³ã³ãã€ã©ãŒã¯ãåãã©ã¡ãŒã¿ãŒãæ£ç¢ºã«1ã€ã®åŒæ°ãåãåãããšã確èªããŸãã
ããã©ã«ãå€
createWindow
ããã·ãŒãžã£ã䜿ããããããã«ã¯ã
ããã©ã«ãå€ãã€ãŸãåŒã³åºãå
ãæå®ããªãã£ãå Žåã«åŒæ°ãšããŠäœ¿çšãããå€ãæäŸããå¿
èŠããããŸãã
proc createWindow(x = 0, y = 0, width = 500, height = 700, title = "unknown", show = true): Window = ... var w = createWindow(title = "My Application", height = 600, width = 800)
createWindow
ãåŒã³åºããšããããã©ã«ãå€ãšç°ãªãå€ã®ã¿ãæå®ããå¿
èŠããããŸãã
ããã©ã«ãå€ãæã€ãã©ã¡ãŒã¿ã®å Žåãåæšè«ãæ©èœãããããããšãã°
title: string = "unknown"
ããã«èšè¿°ããå¿
èŠã¯ãããŸããã
ãªãŒããŒããŒããããããã·ãŒãžã£
Nimã䜿çšãããšãC ++ã«äŒŒãããã·ãŒãžã£ããªãŒããŒããŒãã§ããŸãã
proc toString(x: int): string = ... proc toString(x: bool): string = if x: result = "true" else: result = "false" echo(toString(13))
ïŒNimã®
toString
ã¯éåžž
$
æŒç®åã«ãã£ãŠå®è£
ãããããšãå¿ããªãã§ãã ãããïŒã³ã³ãã€ã©ã¯
toString
ãåŒã³åºãããã®æãé©åãªããã·ãŒãžã£ãéžæããŸãã ãªãŒããŒããŒããããããã·ãŒãžã£ãéžæããã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœãããã«ã€ããŠã¯ãããã§ã¯èª¬æããŸããïŒãã®åé¡ã«ã€ããŠã¯ããŸããªãããã¥ã¢ã«ã§èª¬æããŸãïŒã ããããããã¯äžå¿«ãªé©ããããããããããªãåçŽãªçµ±åã¢ã«ãŽãªãºã ã«åºã¥ããŠããŸãã ãããŸããªåŒã³åºãã¯ãšã©ãŒã¡ãã»ãŒãžã«ãªããŸãã
ãªãã¬ãŒã¿ãŒ
Nimã©ã€ãã©ãªã¯ãªãŒããŒããŒããéäžçã«äœ¿çšããŸããããã®çç±ã®1ã€ã¯ã
+
ãªã©ã®ãã¹ãŠã®æŒç®åããªãŒããŒããŒããããããã·ãŒãžã£ã«ãããªãããšã§ãã ããŒãµãŒã§ã¯ã
äžçœ® èšå· (+ a)
(a + b)
ãŸãã¯
æ¥é è¡šèš (+ a)
(a + b)
æŒç®åã䜿çšã§ããŸãã äžçœ®æŒç®åã¯åžžã«2ã€ã®åŒæ°ãåããå眮æŒç®åã¯åžžã«1ã€ã®åŒæ°ãåããŸãã åŸçœ®æŒç®åã¯ãããŸãããæãå¯èœæ§ãããããçŠæ¢ãããŠããŸãïŒ
a @ @ b
ã¯
(a) @ (@b)
a @ @ b
(a) @ (@b)
ãŸãã¯
(a@) @ (b)
æå³ããŸããïŒ Nimã«ã¯åŸ
(a) @ (@b)
æŒç®åããªãããããã®åŒã¯åžžã«
(a) @ (@b)
æå³ããŸãã
and
ã
or
ã
not
ãªã©ã®ããã€ãã®çµã¿èŸŒã¿ããŒã¯ãŒãæŒç®åã«å ããŠãæŒç®åã¯åžžã«æ¬¡ã®æåã§æ§æãããŸãïŒ
+ - * \ / < > = @ $ ~ & % ! ? ^ . |
+ - * \ / < > = @ $ ~ & % ! ? ^ . |
ãŠãŒã¶ãŒå®çŸ©ã®æŒç®åãèš±å¯ãããŸãã ç¬èªã®
@!?+~
æŒç®åã®å®çŸ©ã劚ãããã®ã¯äœããããŸããããèªã¿ãããã圱é¿ãåããå¯èœæ§ããããŸãã
ãªãã¬ãŒã¿ãŒã®åªå
é äœã¯ãæåã®æåã«ãã£ãŠæ±ºãŸããŸãã 詳现ã¯ããã¥ã¢ã«ã«èšèŒãããŠããŸãã
æŒç®åãå®çŸ©ããã«ã¯ãã¢ãã¹ãããã£ã§å²ã¿ãŸãã proc `$` (x: myDataType): string = ...
ãã®è¡šèšã¯ãæŒç®åãããã·ãŒãžã£ãšããŠåŒã³åºãããã«ã䜿çšã§ããŸãã if `==`( `+`(3, 4), 7): echo("True")
äºåã®ãç¥ãã
å倿°ãããã·ãŒãžã£ãªã© 䜿çšããåã«å®£èšããå¿
èŠããããŸããïŒãã®çç±ã¯ãNimããµããŒãããã®ãšåçšåºŠã«ã¡ã¿ããã°ã©ãã³ã°ããµããŒãããèšèªã®ããè¯ããœãªã¥ãŒã·ã§ã³ãèŠã€ããã®ãé£ããããã§ããïŒããããããã¯çžäºã«ååž°çãªæé ã§ã¯è¡ããŸããã
ããodd
ã¯äŸåãeven
ãéããŸãåæ§ã§ãããããã£ãŠãeven
å®å
šã«å®çŸ©ãããåã«ã³ã³ãã€ã©ã«é©åããªããã°ãªããŸããããã®ãããªäºå宣èšã®æ§æã¯åçŽã§ã=
ãããã·ãŒãžã£ã®æ¬äœãã¹ãããããã ãã§ããassert
å¢çæ¡ä»¶ã远å ããŠãã¢ãžã¥ãŒã«ã»ã¯ã·ã§ã³ã§åŸã§èª¬æãããŸãããã®èšèªã®å°æ¥ã®ããŒãžã§ã³ã§ã¯ãäºåã®çºè¡šã®èŠä»¶ã¯ããã»ã©å³ãããªãã§ãããããã®äŸã¯ãæŒç®åã®æ¬äœããå€ãæé»çã«è¿ãããåäžã®åŒã§æ§æãããæ¹æ³ã瀺ããŠããŸããã€ãã¬ãŒã¿
éå±ãªã«ãŠã³ãã®äŸã«æ»ããŸãããã echo(" : ") for i in countup(1, 10): echo($i)
countup
ãã®ãããªãµã€ã¯ã«ã§äœ¿çšããæé ãæžãããšã¯å¯èœã§ããïŒè©ŠããŠã¿ãŸãããïŒ proc countup(a, b: int): int = var res = a while res <= b: return res inc(res)
æ®å¿µãªãããããã¯æ©èœããŸãããåé¡ã¯ãããã·ãŒãžã£ãå€ãè¿ãã ãã§ãªããæ¬¡ã®ååŸ©ã§æ»ã£ãŠäœæ¥ãç¶è¡ããå¿
èŠãããããšã§ãããã®ãæ»ããç¶è¡ãã¯ããŒã ãšåŒã°ãyield
ãŸããããã§ãããŒã¯ãŒãã眮ãæããã ãproc
ã§iterator
ãããã«ãããŸã-æåã®ã€ãã¬ãŒã¿ãŒïŒ iterator countup(a, b: int): int = var res = a while res <= b: yield res inc(res)
ã€ãã¬ãŒã¿ã¯æé ã«éåžžã«äŒŒãŠããŸãããããã€ãã®éèŠãªéãããããŸãã- å埩åã¯ã«ãŒãããã®ã¿åŒã³åºãããšãã§ããŸã
for
ã - ã€ãã¬ãŒã¿ã«ã³ãã³ããå«ããããšã¯ã§ããŸãã
return
ããŸããããã·ãŒãžã£ã«ã³ãã³ããå«ããããšã¯ã§ããŸããyield
ã - ã€ãã¬ãŒã¿ã«ã¯æé»çãªå€æ°ã¯ãããŸãã
result
ã - å埩åã¯ååž°ããµããŒãããŠããŸããã
- ã³ã³ãã€ã©ã¯ã€ãã¬ãŒã¿ãã€ã³ã©ã€ã³åã§ããå¿
èŠãããããã以åã«ã€ãã¬ãŒã¿ã宣èšããããšã¯ã§ããŸããïŒãã®å¶éã¯ã³ã³ãã€ã©ã®å°æ¥ã®ããŒãžã§ã³ã§åé€ãããäºå®ã§ãïŒã
ãã ããclosure
ç°ãªãå¶éã®ã»ãããæã€ã€ãã¬ãŒã¿ãŒã䜿çšããããšãã§ããŸãã詳现ã«ã€ããŠã¯ãããã¡ãŒã¹ãã¯ã©ã¹ã€ãã¬ãŒã¿ãã®ããã¥ã¡ã³ãã»ã¯ã·ã§ã³ãåç
§ããŠãã ãããã€ãã¬ãŒã¿ã¯ãããã·ãŒãžã£ãšåãååãšãã©ã¡ãŒã¿ãæã€ããšãã§ããŸããç¬èªã®åå空éãæã¡ãŸãããããã£ãŠãã€ãã¬ãŒã¿ã®çµæãèç©split
ããmoduleããã®ããã«ã·ãŒã±ã³ã¹ã®åœ¢åŒã§è¿ãåãååã®ããã·ãŒãžã£ã§ã€ãã¬ãŒã¿ãã©ããããäžè¬çãªæ¹æ³ããããŸãstrutils
ãåºæ¬ã¿ã€ã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãåºæ¬çãªçµã¿èŸŒã¿ã¿ã€ããšãããã§äœ¿çšå¯èœãªæäœã«ã€ããŠè©³ãã説æããŸããããŒã«å€
Nimã®è«çåãåŒã³åºãbool
ãã2ã€ã®å®çŸ©æžã¿ã®å€ãtrue
ããã³ã§æ§æãããŸãfalse
ãã³ãã³ãã§ã®æ¡ä»¶ã¯while
ãif
ãelif
ããã³when
ã¿ã€ããæã£ãŠããå¿
èŠããããŸãbool
ãã¿ã€ãã®ããã«bool
å®çŸ©ãããäºæ¥è
not
ãand
ãor
ãxor
ã<
ã<=
ã>
ã>=
ã!=
ãš==
ãæŒç®åand
ãšor
ççž®èšç®ãå®è¡ããŸããäŸïŒ
while p != nil and p.name != "xyz":
ãã£ã©ã¯ã¿ãŒ
Nim ã®æåã¿ã€ãã¯ãšåŒã°ãchar
ãŸãããµã€ãºã¯1ãã€ãã§ãããããã£ãŠãUTF-8æåã«ããããšã¯ã§ããŸããããã®äžéšã®ã¿ã§ãããã®çç±ã¯å¹çæ§ã§ããUTF-8ã¯ãã®ããã«ç¹å¥ã«éçºãããŠãããããã»ãšãã©ã®å Žåã宿ããããã°ã©ã ã¯UTF-8ã§ããŒã¿ãæ£ããåŠçããŸããæåãªãã©ã«ã¯åäžåŒçšç¬Šã§å²ãŸããŸããèšå·ã¯ãæŒç®åã䜿çšããŠæ¯èŒããããšãã§ã==
ã<
ã<=
ã>
ãšããŸã>=
ãæŒç®åã¯ã«$
倿ãchar
ãstring
ãŸããæåãæŽæ°ãšæ··åšãããããšã¯ã§ããŸãããæé ã䜿çšããŠãæåã®æ°å€ãååŸããŸãord
ãæ°å€ããæåãžã®å€æã¯ãããã·ãŒãžã£ã䜿çšããŠå®è¡ãããŸãchr
ãè¡
Nimã®æååå€ã¯å¯å€ãªã®ã§ãéšåæååãæååã«è¿œå ããæäœã¯éåžžã«å¹ççã§ãã Nimã®è¡ã¯åæã«ãŒãã§çµãããé·ããã£ãŒã«ããå«ã¿ãŸããæååã®é·ãã¯ãçµã¿èŸŒã¿ããã·ãŒãžã£ã«ãã£ãŠååŸã§ããŸãlen
ãé·ãã¯ãçµç«¯ã®ãŒããèæ
®ã«å
¥ããŸãããæ«å°Ÿã®ãŒãã«ã¢ã¯ã»ã¹ããŠããšã©ãŒã¯çºçãããå€ãã®å Žåãã³ãŒããç°¡çŽ åãããŸãã if s[i] == 'a' and s[i+1] == 'b':
æååã®ä»£å
¥æŒç®åã¯ãæååãã³ããŒããŸããæŒç®å&
ã䜿çšããŠãã¹ããªã³ã°ãé£çµãadd
ããµãã¹ããªã³ã°ã远å ã§ããŸããæååã®æ¯èŒã¯èŸæžåŒé åºã§è¡ãããŸãããã¹ãŠã®æ¯èŒæŒç®åãèš±å¯ãããŸããæ
£äŸã«ããããã¹ãŠã®è¡ã¯UTF-8è¡ã§ãããããã¯å¿
é ã§ã¯ãããŸãããããšãã°ããã€ããªãã¡ã€ã«ããæååãèªã¿åãå Žåãæååã¯ãã€ãã·ãŒã±ã³ã¹ã§ããå¯èœæ§ãé«ããªããŸããæäœs[i]
ãšã¯ãæååã®i
içªç®ã®æåïŒi
nçªç®ã®Unicodeæåã§ã¯ãªãïŒãæå³ããŸãs
ãæåå倿°ã¯ãšåŒã°ããç¹å¥ãªå€ã§åæåããnil
ãŸãããã ããã»ãšãã©ã®æååæäœã¯nil
ïŒããã«ãããäŸå€ãçºçããŸãïŒããã©ãŒãã³ã¹äžã®çç±ããã代ããã«nil
ãç©ºã®æååã空ã®å€ãšããŠäœ¿çšããŸã""
ããã ã""
ãããŒãäžã«æååãªããžã§ã¯ããäœæããããããããã§ã¯ã¡ã¢ãªãšããã©ãŒãã³ã¹ã®åŠ¥åç¹ãèŠã€ããå¿
èŠããããŸããæŽæ°
ãã ã¯ãçµã¿èŸŒã¿ã®æŽæ°åã®æ¬¡ããããŸãint
ãint8
ãint16
ãint32
ãint64
ãuint
ãuint8
ãuint16
ãuint32
ãšuint64
ãããã©ã«ãã¯æŽæ°åint
ã§ããæŽæ°ãªãã©ã«ã«ã¯ã1ã€ãŸãã¯å¥ã®æŽæ°åã«å±ããããšãç€ºãæ¥å°ŸèŸãä»ããããšãã§ããŸãã let x = 0
ã»ãšãã©ã®å ŽåãæŽæ°ã¯ã¡ã¢ãªã«æ ŒçŽãããŠãããªããžã§ã¯ããã«ãŠã³ãããããã«äœ¿çšãããããããµã€ãºint
ã¯ãã€ã³ã¿ãŒã®ãµã€ãºãšçãããªããŸãã倧æäºæ¥è
+
ã-
ã*
ãdiv
ãmod
ã<
ã<=
ã==
ã!=
ã>
ããã³>=
æŽæ°ã®ããã«å®çŸ©ãããŸãããæŒç®åand
ãor
ãxor
ããã³not
æŽæ°ã«å¯ŸããŠå®çŸ©ããããããæŒç®ãå®è¡ããããã«ãå·Šãããã·ããã¯æŒç®åã䜿çšããŠè¡ããshl
ãå³ã·ããã¯æŒç®åã䜿çšããŠè¡ããshr
ãŸãããããã·ããæŒç®åã¯ãåžžã«åŒæ°ã笊å·ãªãã®æ°å€ãšããŠæ±ããŸããä¹ç®ãŸãã¯é€ç®ã«äœ¿çšã§ããŸãããã¹ãŠã®çœ²åãããŠããªãæäœã«ã¯ã©ãããŒãè£
åãããŠããããããªãŒããŒãããŒãšã©ãŒãçºçããããšã¯ãããŸãããèªåå倿ã¯ãç°ãªãæŽæ°åã䜿çšããåŒã§å®è¡ãããŸãããã ããå倿ã«ãã£ãŠæ
å ±ã倱ããããšãäŸå€ãçºçããŸãEOutOfRange
ïŒã³ã³ãã€ã«æ®µéã§ãšã©ãŒãæ€åºãããªãã£ãå ŽåïŒãæµ®åå°æ°ç¹æ°
ãã ã¯å
èµã®æµ®åå°æ°ç¹æ°ã®çš®é¡ä»¥äžããããŸãfloat
ãfloat32
ãšfloat64
ãããã©ã«ãã§ã¯ãã¿ã€ãã䜿çšããfloat
ãŸããçŸåšã®å®è£
ã§float
ã¯ããµã€ãºã¯åžžã«64ãããã§ããæµ®åå°æ°ç¹ãªãã©ã«ã«ã¯ã1ã€ãŸãã¯å¥ã®ã¿ã€ãã®æµ®åå°æ°ç¹æ°ã«å±ããããšãç€ºãæ¥å°ŸèŸãä»ããããšãã§ããŸãã var x = 0.0
äž»èŠãªãã¬ãŒã¿ãŒ+
ã-
ã*
ã/
ã<
ã<=
ã==
ã!=
ã>
ããã³>=
IEEEèŠæ Œã«ãã€ã³ãçªå·ãšå¯Ÿå¿ããŠãããŒãã£ã³ã°ããã«å®çŸ©ãããŸãããããŸããŸãªã¿ã€ãã®æµ®åå°æ°ç¹åãæã€åŒã®èªåå倿ãå®è¡ãããŸããå°ããªåã¯å€§ããªåã«å€æãããŸããæŽæ°åã¯æµ®åå°æ°ç¹åã«èªåçã«å€æãããããã®éãè¡ãããŸããããã®ãããªå€æã«ã¯ãtoInt
ããã³ããã·ãŒãžã£ã䜿çšã§ããŸãtoFloat
ãå倿
Nimã®ããŒã¹ã¿ã€ãéã®å€æã¯ãã¿ã€ãã颿°ãšããŠäœ¿çšããããšã§å®çŸãããŸãã var x: int32 = 1.int32
åã®å
éšè¡šçŸ
åè¿°ããããã«ãæååãžã®çµã¿èŸŒã¿ã®å€ææŒç®åã¯ã$
ä»»æã®åºæ¬åããããã·ãŒãžã£ã䜿çšããŠè¡šç€ºã§ããæååã«å€æããŸãecho
ããã ãããªãã¬ãŒã¿ãŒ$
ã¯ãè€éãªã¿ã€ããŸãã¯èªåã§äœæããã¿ã€ãããåå®çŸ©ãããŸã§æäœã§ããŸãããæã
ããããã°æã«ãå¥ã®æŒç®åãèšè¿°ããããšãªããè€ååã®å€ãèŠã€ããããšãå¿
èŠã«ãªããŸã$
ããã®å Žåãrepr
ä»»æã®ã¿ã€ããããã«ã¯è€éãªåŸªç°ããŒã¿ã°ã©ãã§ãæ©èœããæé ã䜿çšã§ããŸããæ¬¡ã®äŸã¯ãåºæ¬ã¿ã€ãã§ãã£ãŠããçµæ$
ãšã®éã«éããããããšã瀺ããŠããŸãrepr
ã var myBool = true myCharacter = 'n' myString = "nim" myInteger = 42 myFloat = 3.14 echo($myBool, ":", repr(myBool))
远å ã®çš®é¡
Nimã®æ°ããã¿ã€ãã¯ã次ã®ã³ãã³ãã䜿çšããŠå®çŸ©ã§ããŸãtype
ã type biggestInt = int64
åæãšãªããžã§ã¯ãã¿ã€ãã¯ãã³ãã³ãã§ã®ã¿ããªã³ã¶ãã©ã€ãã§å®çŸ©ã§ããŸããtype
ãä¹ãæã
åæã®ã¿ã€ãã«é¢é£ãã倿°ã¯ãéãããå€ã®ã»ããã®ã¿ãåãããšãã§ããŸãããã®ã»ããã¯ãé åºä»ããããæåã§æ§æãããŠããŸããåæåã¯å
éšçã«æŽæ°å€ã«ããããããŸããæåã®æåã¯æ°åã®0ã«å¯Ÿå¿ãã2çªç®ã®æåã¯æ°åã®1ã«å¯Ÿå¿ããŸããäŸïŒ
type Direction = enum north, east, south, west var x = south
転éã«ã¯ãä»»æã®æ¯èŒæŒç®åã䜿çšã§ããŸããã·ã³ãã«ã転éããã®ãåé¿ããããã«åé¡ã§ããŸãDirection.south
ãæŒç®å$
ã¯ãåæã®å€ãèªåã®ååã«å€æããããã·ãŒãžã£ord
ã察å¿ããæŽæ°å€ã«å€æã§ããŸããä»ã®ããã°ã©ãã³ã°èšèªãšã®ããè¯ã察話ã®ããã«ãåææåã«æŽæ°å€ãæç€ºçã«å²ãåœãŠãããšãã§ããŸãããã ãããããã«ããŠããæé ã§ãªããã°ãªããŸãããæç€ºçã«æ°å€ãå²ãåœãŠãããŠããªãæåã¯ãåã®æåã«1ãå ããå€ãåãåããŸããæç€ºçã«çªå·ä»ããããåæã«ã¯ãçç¥ãå«ãŸããå ŽåããããŸãã type MyEnum = enum a = 2, b = 4, c = 89
åæå
äŒæ©ãªãã§è»¢éããæŽæ°åchar
ãbool
ïŒããã³ãã®ãµããã³ãïŒ -圌ãã¯åæåãšåŒã°ããŠããŸããåæåã«ã¯ãããã€ãã®ç¹å¥ãªæäœããããŸããéå¶ | 解説 |
---|
ord(x) | å€ã衚ãããã«äœ¿çšãããæŽæ°ãè¿ããŸã x |
inc(x) | x 1 ãã€å¢å |
inc(x, n) | å¢å x ã«n ; n æŽæ°ã§ã |
dec(x) | x 1 æžå° |
dec(x, n) | ã«ãã£ãŠæžå°x ãn ãŸããn æŽæ°ã§ã |
succ(x) | 次ã®x ã¢ã€ãã ãè¿ããŸã |
succ(x, n) | n 次ã®èŠçŽ ãè¿ããŸãx |
pred(x) | å
è¡ãè¿ããŸã x |
pred(x, n) | n å
è¡ãè¿ããŸãx |
æäœã¯inc
ãdec
ãsucc
ããã³pred
ãšã©ãŒã§å®è¡ããããšãã§ããäŸå€ãã¹ããŒãããŸãEOutOfRange
ãEOverflow
ãïŒãã¡ãããäŸå€ãã§ãã¯ãæå¹ã«ããŠã³ãŒããã³ã³ãã€ã«ããªãéããïŒç¯å²
ãã®åã¯ãæŽæ°åãŸãã¯åæåïŒåºæ¬åïŒã®å€ã®ç¯å²ã§ãã äŸïŒ
type Subrange = range[0..5]
Subrange
ããã¯ãint
0ã5ã®å€ãå«ãããšãã§ããç¯å²ã§ããä»ã®å€ãå倿°ã«å²ãåœãŠãSubrange
ãšãã³ã³ãã€ã«ãšã©ãŒãŸãã¯å®è¡æãšã©ãŒãçºçããŸããåºæ¬ã¿ã€ãããã®ç¯å²ã®1ã€ã«ïŒããã³ãã®éã«ïŒå²ãåœãŠãããšã¯èš±å¯ãããŠããŸããã¢ãžã¥ãŒã«system
ã¯ãéèŠãªã¿ã€ãNatural
ãrange[0..high(int)]
ïŒhigh
èš±å¯ãããæå€§å€ãè¿ããŸãïŒãšããŠå®çŸ©ããŸããä»ã®ããã°ã©ãã³ã°èšèªã§ã¯ãèªç¶æ°ãæ±ãããã«ç¬Šå·ãªãæŽæ°ã䜿çšããå¿
èŠããããŸããããã¯ãã°ãã°ééã£ãŠããŸããæ°åãè² ã«ã§ããªããšããçç±ã ãã§ã笊å·ãªãç®è¡ã®äœ¿çšã匷å¶ãããã¹ãã§ã¯ãããŸãããNatural
Nimèšèªã¿ã€ãã¯ããã®äžè¬çãªããã°ã©ãã³ã°ãšã©ãŒãåé¿ããŸããå€ãã®
ã¿ã€ãset
ã¯ãã»ããã®æ°åŠçæŠå¿µãã¢ãã«åããŸããã»ããã®åºæ¬åã¯ãç¹å®ã®ãµã€ãºã®åæåã®ã¿ã§ããã€ãŸããint8-int16
uint8/byte-uint16
char
enum
ãŸãã¯åçããã®çç±ã¯ãã»ããã髿§èœããããã¯ãã«ãšããŠå®è£
ãããŠããããã§ãããã倧ããªã»ããã宣èšããããšãããšããšã©ãŒãçºçããŸãã var s: set[int64]
ã»ããã¯ãã»ããã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠæ§ç¯ã§ããŸãã{}
ããã¯ç©ºã®ã»ããã§ãã空ã®ã»ããã¯ãç¹å®ã®ã¿ã€ãã®ã»ãããšã¿ã€ãäºææ§ããããŸããã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãèŠçŽ ïŒããã³èŠçŽ ã®ç¯å²ïŒãå«ããããšãã§ããŸãã type CharSet = set[char] var x: CharSet x = {'a'..'z', '0'..'9'}
ã»ããã§ã¯ãæ¬¡ã®æäœããµããŒããããŠããŸããéå¶ | 説æ |
---|
A + B | 2ã€ã®ã»ããã®çµå |
A * B | 2ã€ã®ã»ããã®äº€å·®ç¹ |
A - B | 2ã€ã®ã»ããã®å·®ïŒA èŠçŽ ãªãB ïŒ |
A == B | ã»ããã®å¹³ç |
A <= B | ãµãã»ããé¢ä¿ïŒA ãµãã»ããB ãŸãã¯åçç©B ïŒ |
A < B | å³å¯ãªãµãã»ããé¢ä¿ïŒA ãµãã»ããã§ãB ïŒ |
e in A | ã»ããã®ã¡ã³ããŒã·ããïŒA èŠçŽ ãå«ãe ïŒ |
e notin A | A èŠçŽ ãå«ãŸãªã e |
contains(A, e) | A èŠçŽ ãå«ã e |
card(A) | ãã¯ãŒA ïŒã®èŠçŽ æ°A ïŒ |
incl(A, elem) | ãšåã A = A + {elem} |
excl(A, elem) | ãšåã A = A - {elem} |
å€ãã®å Žåãæé ãã©ã°ã«ã¹ã³ã¢ã䜿çšãããŸããããã¯ãæäœã§çµåããå¿
èŠãããæŽæ°å®æ°ãå®çŸ©ãããããéææ§ã®é«ãïŒã¿ã€ãã»ãŒããªïŒãœãªã¥ãŒã·ã§ã³ã§ãor
ãé
å
é
åã¯ãåºå®ãµã€ãºã®åçŽãªã³ã³ããã§ãããã¹ãŠã®èŠçŽ ã¯åãåã§ããä»»æã®åæåãé
åã€ã³ããã¯ã¹ãšããŠäœ¿çšã§ããŸããé
åã¯æ¬¡ã䜿çšããŠäœæã§ããŸã[]
ã type IntArray = array[0..5, int]
衚èšã¯x[i]
ãi
içªç®ã®èŠçŽ ã«ã¢ã¯ã»ã¹ããããã«äœ¿çšãããŸãx
ãé
åèŠçŽ ã«ã¢ã¯ã»ã¹ããå ŽåãïŒã³ã³ãã€ã«æãŸãã¯å®è¡æã«ïŒåžžã«å¢çããã§ãã¯ãããŸãããã®ãã§ãã¯ã¯ããã©ã°ãã«ãã£ãŠããŸãã¯ããŒã䜿çšããŠã³ã³ãã€ã©ãåŒã³åºãããšã«ãã£ãŠç¡å¹ã«ã§ããŸã--bound_checks:off
ãé
åã¯ãä»ã®Nimåãšåæ§ã«å€åã§ãã代å
¥æŒç®åã¯ãé
åã®å
容å
šäœãã³ããŒããŸããçµã¿èŸŒã¿ããã·ãŒãžã£len
ã¯ãé
åã®é·ããè¿ããŸããlow(a)
é
åã®å¯èœãªæå°ã®ã€ã³ããã¯ã¹a
ãšãhigh(a)
å¯èœãªæå€§ã®ã€ã³ããã¯ã¹ãè¿ããŸãã type Direction = enum north, east, south, west BlinkLights = enum off, on, slowBlink, mediumBlink, fastBlink LevelSetting = array[north..west, BlinkLights] var level: LevelSetting level[north] = on level[south] = slowBlink level[east] = fastBlink echo repr(level)
éåžžã忬¡å
ã¯ä»ã®æ¬¡å
ãšåãåã§ããå¿
èŠããããããä»ã®èšèªã®ãã¹ããããé
åïŒè€æ°ã®æ¬¡å
ïŒã®æ§æã¯ãè§æ¬åŒ§ã远å ããããšã«ãªããŸãã Nimã§ã¯ãç°ãªãã€ã³ããã¯ã¹ã¿ã€ãã§ç°ãªããã£ã¡ã³ã·ã§ã³ã䜿çšã§ããããããã¹ãæ§æã¯ãããã«ç°ãªããŸããlevel
å¥ã®åæã«ãã£ãŠã€ã³ããã¯ã¹ãä»ããããåæã®é
åãšããŠå®çŸ©ãããŠããåã®äŸã«åºã¥ããŠã次ã®è¡ã远å ããŠãããŒã³ã³ã®ã¿ã€ããæŽæ°ã€ã³ããã¯ã¹ããã¢ã¯ã»ã¹ã§ããã¬ãã«ã«åå²ã§ããããã«ããŸãã type LightTower = array[1..10, LevelSetting] var tower: LightTower tower[1][north] = slowBlink tower[1][east] = mediumBlink echo len(tower)
çµã¿èŸŒã¿ããã·ãŒãžã£len
ã¯ãæåã®ã¬ãã«ã®é
åã®é·ãã®ã¿ãè¿ãããšã«æ³šæããŠãã ããããã¹ããããæ§è³ªããããã瀺ãLightTower
ããã«ãåã®åå®çŸ©ãèšè¿°ã§ããŸããã§ããLevelSetting
ãã代ããã«æåã®æ¬¡å
ã®åã«çŽæ¥å«ããããšãã§ããŸããã type LightTower = array[1..10, array[north..west, BlinkLights]]
å€ãã®å Žåãé
åã¯ãŒãããå§ãŸããŸãããã®ãããç¯å²ã0ããæå®ãããã€ã³ããã¯ã¹ãã1ãåŒããå€ã«èšå®ããããã®ç°¡åãªæ§æããããŸãã type IntArray = array[0..5, int]
ã·ãŒã±ã³ã¹
ã·ãŒã±ã³ã¹ã¯é
åã«äŒŒãŠããŸãããå®è¡æã«å€æŽã§ããã®ã¯é·ãã ãã§ãïŒæååãšåæ§ïŒãã·ãŒã±ã³ã¹ã¯ãµã€ãºã倿Žã§ãããããåžžã«ããŒãã«é
眮ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«é¢äžããŸããã·ãŒã±ã³ã¹ã¯åžžã«ã€ã³ããã¯ã¹ãint
0ã®æäœã§å§ãŸãlen
ãlow
ããã³high
ã·ãŒã±ã³ã¹ã®ããã«äŸ¿å©ã§ãã衚èšx[i]
ã䜿çšããŠãi
içªç®ã®èŠçŽ ã«ã¢ã¯ã»ã¹ã§ããŸãx
ãé
åã¯[]
ãé
åããé
åãžã®æŒç®åã«æ¥ç¶ãããé
åã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠæ§ç¯ã§ããŸã@
ãã·ãŒã±ã³ã¹ã«ã¡ã¢ãªãå²ãåœãŠããã1ã€ã®æ¹æ³ã¯ãçµã¿èŸŒã¿ããã·ãŒãžã£ãåŒã³åºãããšnewSeq
ã§ããã·ãŒã±ã³ã¹ã¯ãã©ã¡ãŒã¿ã§æž¡ãããšãã§ããŸãopenarray
ãäŸïŒ
var x: seq[int]
ã·ãŒã±ã³ã¹å€æ°ã¯å€ã§åæåãããŸãnil
ããã ããã·ãŒã±ã³ã¹äžã®ã»ãšãã©ã®æäœã¯nil
ãããã©ãŒãã³ã¹äžã®çç±ã§æ©èœããŸããïŒããã«ããäŸå€ãã¹ããŒãããŸãïŒãããã§ã空å€ãšããŠç©ºã®ã·ãŒã±ã³ã¹ã䜿çšããã®ã¯è³¢æã§ããããè³¢æ@[]
ã§ãnil
ããã ã@[]
ãããŒãäžã«ã·ãŒã±ã³ã¹ãªããžã§ã¯ããäœæããããããç¹å®ã®ã±ãŒã¹ã«é©ãããœãªã¥ãŒã·ã§ã³ãæ¢ãå¿
èŠããããŸããã·ãŒã±ã³ã¹ã«äœ¿çšãããã³ãã³ãfor
ã¯ã1ã€ãŸãã¯2ã€ã®å€æ°ã§æ©èœããŸãã 1ã€ã®å€æ°ãæã€ãã©ãŒã ã䜿çšããå Žåã倿°ã«ã¯ã·ãŒã±ã³ã¹ã«ãã£ãŠæäŸãããå€ãå«ãŸããŸããããŒã for
ã¯ãitems()
ã¢ãžã¥ãŒã«å埩åããåŸãããçµæã«åŸããŸãsystem
ããã ãã2ã€ã®å€æ°ãæã€ãã©ãŒã ã䜿çšããå Žåãæåã®å€æ°ã«ã¯äœçœ®ã€ã³ããã¯ã¹ãå«ãŸãã2çªç®ã®å€æ°ã«ã¯å€ãå«ãŸããŸãããã®å Žåãã³ãã³ãã¯moduleã®for
å埩åã®çµæã«åŸãpairs()
ãŸãsystem
ãäŸïŒ
for i in @[3, 4, 5]: echo($i)
ãªãŒãã³ã¢ã¬ã€
泚ïŒãªãŒãã³é
åã¯ããã©ã¡ãŒã¿ãŒãšããŠã®ã¿äœ¿çšã§ããŸãã
å€ãã®å Žåãåºå®ãµã€ãºã®é
åã¯ååãªæè»æ§ãæããªãããšã倿ããŠããŸããããã·ãŒãžã£ã¯ãç°ãªããµã€ãºã®é
åãåŠçããå¿
èŠãããå ŽåããããŸããããã«ã¯ãªãŒãã³ã¢ã¬ã€ã¿ã€ãããããŸãããªãŒãã³é
åã¯åžžã«æŽæ°ã§ã€ã³ããã¯ã¹åãããŠããããã³ããªã³ã°ã¯åœŒãã®ããã«0ã§äœ¿çšå¯èœãªæäœãéå§ãlen
ãlow
ãããŠhigh
ãäºææ§ã®ããããŒã¹åãæã€é
åã¯ããªãŒãã³é
åãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããšãã§ããŸã;ã€ã³ããã¯ã¹åã¯é¢ä¿ãããŸããã var fruits: seq[string]
ãªãŒãã³é
åã®ã¿ã€ãããã¹ãããããšã¯ã§ããŸããã倿¬¡å
ãªãŒãã³é
åã®å¿
èŠæ§ã¯ãã£ãã«çºçãããå¹ççã«å®è£
ã§ããªãããã倿¬¡å
ãªãŒãã³é
åã¯ãµããŒããããŠããŸãããä»»æã®æ°ã®åŒæ°ãæã€ãã©ã¡ãŒã¿ãŒ
ãã©ã¡ãŒã¿ãŒvarargs
ã¯ãéããŠããé
åã«äŒŒãŠããŸãããã ããããã«ãä»»æã®æ°ã®åŒæ°ãããã·ãŒãžã£ã«æž¡ãããšãã§ããŸããã³ã³ãã€ã©ãŒã¯ãåŒæ°ãªã¹ããèªåçã«é
åã«å€æããŸãã proc myWriteln(f: File, a: varargs[string]) = for s in items(a): write(f, s) write(f, "\n") myWriteln(stdout, "abc", "def", "xyz")
ãã®å€æã¯ããã©ã¡ãŒã¿ãŒãvarargs
ããã·ãŒãžã£ã®ããããŒã®æåŸã®å Žåã«ã®ã¿è¡ãããŸãããã®ã³ã³ããã¹ãã§å倿ãå®è¡ããããšãã§ããŸãã proc myWriteln(f: File, a: varargs[string, `$`]) = for s in items(a): write(f, s) write(f, "\n") myWriteln(stdout, 123, "abc", 4.0)
ãã®äŸ$
ã¯ããã©ã¡ãŒã¿ãŒãä»ããŠæž¡ããããã¹ãŠã®åŒæ°ã«é©çšãããŸãa
ã$
æååã«é©çšããŠãäœãè¡ãããªãããšã«æ³šæããŠãã ãããã¹ã©ã€ã¹æ°
æ§æã¹ã©ã€ã¹ã¯ç¯å²ã¿ã€ãã«äŒŒãŠããŸãããç°ãªãã³ã³ããã¹ãã§äœ¿çšãããŸããã¹ã©ã€ã¹-ããã¯ã¿ã€ãã®åãªããªããžã§ã¯ãã®Slice
2ã€ã®å¢çãå«ãŸããa
ãããŠb
ãã¹ã©ã€ã¹èªäœã¯ããŸãæçšã§ã¯ãããŸããããä»ã®ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ã¯Slice
ãç¯å²ãèšå®ãããªããžã§ã¯ããåãå
¥ããæŒç®åã«ãã£ãŠå®çŸ©ãããŸãã var a = "Nim is a progamming language" b = "Slices are useless." echo a[7..12]
åã®äŸã§ã¯ãæååã®ãã©ã°ã¡ã³ãã倿Žããããã«ã¹ã©ã€ã¹ã䜿çšãããŠããŸããã¹ã©ã€ã¹ã®å¢çã«ã¯ããã®ã¿ã€ãã§ãµããŒããããŠããä»»æã®å€ãå«ããããšãã§ããŸããããã®å€ãåãå
¥ãããã©ããã¯ãã¹ã©ã€ã¹ãªããžã§ã¯ãã䜿çšããããã·ãŒãžã£ã®ã¿ã決å®ããŸããã¿ãã«
ã¿ãã«ã®ã¿ã€ãã¯ãç°ãªãååã®ãã£ãŒã«ããšãããã®ãã£ãŒã«ãã®é åºãå®çŸ©ããŸããã¿ãã«ãæ§ç¯ããã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšã§ããŸã()
ãã³ã³ã¹ãã©ã¯ã¿ãŒã®ãã£ãŒã«ãé åºã¯ãã¿ãã«å®çŸ©ã®ãã£ãŒã«ãé åºãšäžèŽããå¿
èŠããããŸããç°ãªãã¿ã€ãã®ã¿ãã«ã¯ãåãååã®åãã¿ã€ãã®ãã£ãŒã«ããåãé åºã§æå®ããå ŽåãåçãšèŠãªãããŸããã¿ãã«ã®å²ãåœãŠæŒç®åã¯ãåã³ã³ããŒãã³ããã³ããŒããŸããt.field
ã¿ãã«ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ã«ã¯è¡šèšæ³ã䜿çšãããŸããå¥ã®è¡šèšæ³t[i]
ã¯ãi
-thãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ãæäŸããŸãïŒi
æŽæ°å®æ°ã§ãªããã°ãªããŸããïŒã type Person = tuple[name: string, age: int]
ã¿ãã«ã䜿çšããããã«åã宣èšããå¿
èŠã¯ãããŸããããç°ãªããã£ãŒã«ãåã§äœæãããã¿ãã«ã¯ãåããã£ãŒã«ãåãæã€å Žåã§ããç°ãªããªããžã§ã¯ããšèŠãªãããŸããã¿ãã«ã¯ã倿°ãå²ãåœãŠãããã»ã¹ã§ã¢ã³ããã¯ã§ããŸãïŒãã®å Žåã®ã¿ïŒïŒãããã¯ãã¿ãã«ãã£ãŒã«ãå€ãåã
ã®ååä»ã倿°ã«çŽæ¥å²ãåœãŠãã®ã«äŸ¿å©ã§ããäŸãšããŠããã£ã¬ã¯ããªãååãããã³ãã¹æ¡åŒµåã®äž¡æ¹ãè¿ãsplitFile
ã¢ãžã¥ãŒã«ã®ããã·ãŒãžã£ãèãos
ãŸããã¿ãã«ãé©åã«ã¢ã³ããã¯ããã«ã¯ãã¿ãã«ãã¢ã³ããã¯ããå€ãã«ãã³ã§å²ãå¿
èŠããããŸããããã§ãªãå Žåã¯ããããã®å倿°ã«åãå€ãå²ãåœãŠãŸãïŒäŸïŒ
import os let path = "usr/local/nimc.html" (dir, name, ext) = splitFile(path) baddir, badname, badext = splitFile(path) echo dir
ã¿ãã«ã®ã¢ã³ããã¯ã¯ããããã¯var
ãŸãã¯ã§ã®ã¿æ©èœããŸãlet
ãæ¬¡ã®ã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã import os var path = "usr/local/nimc.html" dir, name, ext = "" (dir, name, ext) = splitFile(path)
åç
§ã¿ã€ããšãã€ã³ã¿ãŒ
åç
§ïŒä»ã®ããã°ã©ãã³ã°èšèªã®ãã€ã³ã¿ãŒãšåãïŒã¯ãå€å¯Ÿ1ã®é¢ä¿ãæŽçããæ¹æ³ã§ããããã¯ãç°ãªããªã³ã¯ãã¡ã¢ãªå
ã®åãå Žæãæãã倿Žã§ããããšãæå³ããŸããNimã¯ããã¬ãŒã¹ããããªã³ã¯ãšãã¬ãŒã¹ãããŠããªããªã³ã¯ãåºå¥ããŸãã远跡ãããŠããªããªã³ã¯ã¯ããã€ã³ã¿ãŒãšãåŒã°ããŸãã远跡ããããªã³ã¯ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã§ããŒãäžã®ãªããžã§ã¯ããæãã远跡ãããŠããªããªã³ã¯ã¯ãã¡ã¢ãªãæåã§å²ãåœãŠããããªããžã§ã¯ããŸãã¯ä»ã®ã¡ã¢ãªäœçœ®ã®ãªããžã§ã¯ããæããŸãããããã£ãŠã远跡ãããŠããªããªã³ã¯ã¯å®å
šã§ã¯ãããŸããããã ããäžéšã®äœã¬ãã«æäœïŒããŒããŠã§ã¢ãžã®ã¢ã¯ã»ã¹ïŒã«ã€ããŠã¯ãããããªãã§ã¯å®è¡ã§ããŸããã远跡ããããªã³ã¯ã¯ãããŒã¯ãŒãã«ãã£ãŠå®£èšããã远跡ãããŸããref
-ããŒã¯ãŒãã«ãã£ãŠptr
ãç©ºã®æ·»å衚èš[]
ã䜿çšããŠããªã³ã¯ã®éåç
§ãã€ãŸããªã³ã¯ãæãèŠçŽ ãååŸã§ããŸããæŒç®å.
ïŒã¿ãã«/ãªããžã§ã¯ããã£ãŒã«ããžã®ã¢ã¯ã»ã¹ïŒããã³[]
ïŒé
å/è¡/ã·ãŒã±ã³ã¹ã€ã³ããã¯ã¹æŒç®åïŒã¯ãåç
§åã®æé»çãªéåç
§ãå®è¡ããŸãã type Node = ref NodeObj NodeObj = object le, ri: Node data: int var n: Node new(n) n.data = 9
çµã¿èŸŒã¿ããã·ãŒãžã£ã䜿çšããŠãæ°ããç£èŠå¯Ÿè±¡ãªããžã§ã¯ãã«ã¡ã¢ãªãå²ãåœãŠãŸãnew
ãäœæ¥æé ã«è¿œè·¡äžå¯èœãªã¡ã¢ãªã䜿çšããããšãã§ãalloc
ãdealloc
ãããŠrealloc
ãã¢ãžã¥ãŒã«ã®ããã¥ã¡ã³ãã«system
ã¯ããããã®åé¡ã«é¢ããè¿œå æ
å ±ãå«ãŸããŠããŸãããªã³ã¯ãäœããæããŠããªãå Žåãããã¯éèŠnil
ã§ããæç¶ãå
æç¶ãåã¯ãæç¶ããžã®ïŒããæœè±¡çãªïŒãã€ã³ã¿ã§ããæç¶ãå倿°ã¯valueãåãããšãã§ããŸãnil
ãNimã¯æç¶ãåã䜿çšããŠé¢æ°åããã°ã©ãã³ã°ææ³ãå®è£
ããŸããäŸïŒ
proc echoItem(x: int) = echo(x) proc forEach(action: proc (x: int)) = const data = [2, 3, 5, 7, 11] for d in items(data): action(d) forEach(echoItem)
æç¶ãåã®éèªæãªåé¡ã¯ãæç¶ãåŒã³åºãèŠåãåã®äºææ§ã«åœ±é¿ããããšã§ããæç¶ãåã¯ãåãåŒã³åºãèŠåã䜿çšããå Žåã«ã®ã¿äºææ§ããããŸããããŸããŸãªåŒã³åºãèŠçŽãããã¥ã¢ã«ã«èšèŒãããŠããŸããã¢ãžã¥ãŒã«
Nimã¯ãã¢ãžã¥ãŒã«æ§ã®æŠå¿µã«åŸã£ãŠããã°ã©ã ãåå²ããããšããµããŒãããŠããŸããåã¢ãžã¥ãŒã«ã¯åå¥ã®ãã¡ã€ã«ã«ãããŸããã¢ãžã¥ãŒã«ã䜿çšãããšãæ
å ±ã®é衚瀺ãšåå¥ã®ã³ã³ãã€ã«ãå®è¡ã§ããŸããã³ãã³ãã䜿çšããŠãä»ã®ã¢ãžã¥ãŒã«ã®ã·ã³ãã«ã«ã¢ã¯ã»ã¹ã§ããŸãimport
ããšã¯ã¹ããŒãã§ããã®ã¯ãã¢ã¹ã¿ãªã¹ã¯ïŒ*
ïŒã§ããŒã¯ãããæäžäœã®ã·ã³ãã«ã®ã¿ã§ãã
ã¢ãžã¥ãŒã«ã¯ãA
ãšã¯ã¹ããŒãx
ããŸã*
ããã§ã¯ãããŸããy
ãã¢ãžã¥ãŒã«ã®ãããã¬ãã«ã®ã³ãã³ãã¯ãããã°ã©ã ã®èµ·åæã«å®è¡ãããŸããããã¯ãããšãã°ãè€éãªããŒã¿æ§é ãåæåããããã«äœ¿çšã§ããŸããåã¢ãžã¥ãŒã«ã«ã¯ç¹å¥ãªããžãã¯å®æ°isMainModule
ããããŸããããã¯ãã¢ãžã¥ãŒã«ãã¡ã€ã³ãã¡ã€ã«ãšããŠã³ã³ãã€ã«ãããå Žåã«åœãŠã¯ãŸããŸããããã¯ãåã®äŸã§ç€ºããããã«ããã¹ãã¢ãžã¥ãŒã«ãå
éšã«åã蟌ãã®ã«éåžžã«äŸ¿å©ã§ããä»ã®ã¢ãžã¥ãŒã«ã«äŸåããã¢ãžã¥ãŒã«ã¯èš±å¯ãããŸãããéåžžã«æãŸãããããŸããããã®å Žåãã¢ãžã¥ãŒã«ã¯äŸåé¢ä¿ãªãã§ã¯åå©çšã§ããªãããã§ããã¢ãžã¥ãŒã«ã®ã³ã³ãã€ã«ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ãšããã§ãã- ã³ãã³ããååž°çã«ç¹°ãè¿ããªãããéåžžã©ããã¢ãžã¥ãŒã«ãã³ã³ãã€ã«ããŸã
import
ã - ã«ãŒããæ€åºãããå Žåããã§ã«è§£æãããæåã®ã¿ãã€ã³ããŒãïŒãšã¯ã¹ããŒãïŒããŸããäžæãªèå¥åãèŠã€ãã£ãå Žåãäžæ¢ããŸãã
ããã¯ãäŸã§æããã瀺ãããŸãã
ã¢ãžã¥ãŒã«æåã¯ãæ§æã䜿çšããŠä¿®é£Ÿã§ããŸãmodule.symbol
ãã·ã³ãã«ããããŸããªå Žåã修食ããå¿
èŠããããŸããã·ã³ãã«ã2ã€ïŒãŸãã¯ãã以äžïŒã®ç°ãªãã¢ãžã¥ãŒã«ã§å®çŸ©ãããäž¡æ¹ã®ã¢ãžã¥ãŒã«ã3çªç®ã®ã¢ãžã¥ãŒã«ã«ãã£ãŠã€ã³ããŒããããå Žåãã·ã³ãã«ã¯ãããŸãã§ãã
ãã ãããã®èŠåã¯ããã·ãŒãžã£ãŸãã¯ã€ãã¬ãŒã¿ã«ã¯é©çšãããŸããããªãŒããŒããŒãã«ãŒã«ã¯ããã«é©çšãããŸãã
ãã£ã©ã¯ã¿ãŒã®é€å€
éåžžãã³ãã³ãimport
ã¯ãšã¯ã¹ããŒãããããã¹ãŠã®æåãåãåããŸããããã¯ã修食åã§é€å€æåãæå®ããããšã§å€æŽã§ããŸãexcept
ã import mymodule except y
ã³ãã³ããã
import
ãšã¯ã¹ããŒãããããã¹ãŠã®æåãã€ã³ããŒãããç°¡åãªã³ãã³ããèŠãŠããŸãããæ¬¡ã®ã³ãã³ãã䜿çšãããšããªã¹ããããŠããæåã®ã¿ãã€ã³ããŒãã§ããŸãfrom import
ã from mymodule import x, y, z
ã³ãã³ãfrom
ã¯ã䜿çšå¯èœãªæåã®çµæãšããŠãæåã®ããŒã ã¹ããŒã¹ã匷å¶ããããšãã§ããŸããããããã䜿çšããã«ã¯ã修食åãæå®ããå¿
èŠããããŸãã from mymodule import x, y, z x()
from mymodule import nil mymodule.x()
ã¢ãžã¥ãŒã«åã¯éåžžéåžžã«é·ãããã修食ã§äœ¿çšãããçããšã€ãªã¢ã¹ãæå®ããããšãã§ããŸãã from mymodule as m import nil mx()
ã³ãã³ããå«ãã
ããŒã include
ã¯ãã¢ãžã¥ãŒã«ã®ã€ã³ããŒããšã¯æ ¹æ¬çã«ç°ãªãããšãè¡ããŸãããã¡ã€ã«ã®å
容ããã®å Žæã«æ¿å
¥ããŸãããã®ã³ãã³ãã¯ã倧ããªã¢ãžã¥ãŒã«ãããã€ãã®ãã¡ã€ã«ã«åå²ããã®ã«éåžžã«äŸ¿å©ã§ãã include fileA, fileB, fileC
ïŒç¶ãã远å ïŒãNimãã¥ãŒããªã¢ã«ïŒããŒã2ïŒããïŒ