sugar

このモジュールは Nim のマクロシステムをベースとした素晴らしいシンタックスシュガーの実装です。

変数

lc: ListComprehension
  ソース 編集

マクロ

macro `=>`(p, b: untyped): untyped
無名プロシージャのシンタックスシュガーです。
proc passTwoAndTwo(f: (int, int) -> int): int =
  f(2, 2)

passTwoAndTwo((x, y) => x + y) # 4
  ソース 編集
macro `->`(p, b: untyped): untyped
プロシージャ型のシンタックスシュガーです。
proc pass2(f: (float, float) -> float): float =
  f(2, 2)

# は下記と同じです。

proc pass2(f: proc (x, y: float): float): float =
  f(2, 2)
  ソース 編集
macro `[]`(lc: ListComprehension; comp, typ: untyped): untyped {...}{.deprecated.}
廃止予定
リストを解読して、シーケンスを返します。comp は、 x | (x <- 1..10, x mod 2 == 0) などの解読対象となるリストです。typ はシーケンスの処理結果へ格納する型です。
echo lc[x | (x <- 1..10, x mod 2 == 0), int]

const n = 20
echo lc[(x,y,z) | (x <- 1..n, y <- x..n, z <- y..n, x*x + y*y == z*z),
        tuple[a,b,c: int]]

version 0.19.9 以降で廃止予定

  ソース 編集
macro dump(x: typed): untyped

式の内容をダンプして、デバッグで使えるようにします。式の入力後、ソースコードに出現する式の値と併せて式のツリー構造をテキスト形式で出力します。

用例:

let
  x = 10
  y = 20
dump(x + y)

x + y = 30 を出力します。

  ソース 編集
macro distinctBase(T: typedesc): untyped
type T = distinct A を反転します。これは再帰的処理を行います。

用例:

type
  T = distinct int
doAssert distinctBase(T) is int
doAssert:
  not compiles(distinctBase(int))
type
  T2 = distinct T
doAssert distinctBase(T2) is int
  ソース 編集

テンプレート

template `|`(lc: ListComprehension; comp: untyped): untyped {...}{.deprecated.}
廃止予定
  ソース 編集