Sollang 언어로 만든 다양한 코드 살펴보기

Sollang으로 만든 다양한 코드가 어떻게 보여지는지를 댓글로 이어 달아보려고 합니다.

2개의 좋아요

첫 번째 구구단입니다.

main {
    2..9 -> each dan {
        "$(dan)단" -> println

        1..9 -> each {
            "$dan × $it = $(dan * it)" -> println
        }

        println()
    }
}

출력은 다음과 같이 됩니다.

2단
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
2 × 4 = 8
2 × 5 = 10
2 × 6 = 12
2 × 7 = 14
2 × 8 = 16
2 × 9 = 18

3단
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
3 × 4 = 12
3 × 5 = 15
3 × 6 = 18
3 × 7 = 21
3 × 8 = 24
3 × 9 = 27

4단
4 × 1 = 4
4 × 2 = 8
4 × 3 = 12
4 × 4 = 16
4 × 5 = 20
4 × 6 = 24
4 × 7 = 28
4 × 8 = 32
4 × 9 = 36

5단
5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
5 × 4 = 20
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45

6단
6 × 1 = 6
6 × 2 = 12
6 × 3 = 18
6 × 4 = 24
6 × 5 = 30
6 × 6 = 36
6 × 7 = 42
6 × 8 = 48
6 × 9 = 54

7단
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63

8단
8 × 1 = 8
8 × 2 = 16
8 × 3 = 24
8 × 4 = 32
8 × 5 = 40
8 × 6 = 48
8 × 7 = 56
8 × 8 = 64
8 × 9 = 72

9단
9 × 1 = 9
9 × 2 = 18
9 × 3 = 27
9 × 4 = 36
9 × 5 = 45
9 × 6 = 54
9 × 7 = 63
9 × 8 = 72
9 × 9 = 81

최초 한글이 깨졌는데 이유는 윈도 콘솔의 기본 인코딩은 UTF-8이 아니기 때문에 콘솔 인코딩을 감지해서 적절하게 잘 출력되도록 패치한 후에 한글이 잘 출력됨을 확인할 수 있었습니다.

함수 호출의 특징은 → func 의 경우 괄호를 사용하지 않는 것이 기본 문법입니다.

"$dan × $it = $(dan * it)" -> println

하지만 줄넘기기의 경우 인자없는 println의 호출은 괄호를 넣어야 제대로 컴파일되게 했습니다.

println()
1개의 좋아요

이런 느낌으로 LINQ 스타일로도 구구단 출력이 가능합니다.

import std.sequence

main {
    2..9
        -> flatMap(1..9) dan, multiplier {
            multiplier == 1 -> if {
                "$(dan)단" -> println
            }

            "$dan × $multiplier = $(dan * multiplier)" -> println

            multiplier == 9 -> if {
                println()
            }
        }
}

이런 느낌으로도 가능합니다.

import std.sequence

main {
    2..9
        -> beforeEach dan {
            "$(dan)단" -> println
        }
        -> afterEach dan {
            println()
        }
        -> flatMap(1..9) dan, multiplier {
            "$dan × $multiplier = $(dan * multiplier)" -> println
        }
}

또는 이렇게,

import std.sequence

main {
    2..9
        -> beforeEach dan {
            "$(dan)단" -> println
        }
        -> afterEach dan {
            println()
        }
        -> flatMap(1..9) dan, multiplier {
            "$dan × $multiplier = $(dan * multiplier)"
        }
        -> each line {
            line -> println
        }
}
1개의 좋아요
import std.sequence

main {
    0 => scanned!

    1..10
        -> beforeEach outer {
        }
        -> flatMap(1..10) outer, inner {
            outer * 10 + inner
        }
        -> tap value {
            scanned! + 1 => scanned!
        }
        -> skip(3)
        -> take(4)
        -> each value {
            "$value" -> println
        }

    "scanned=$(scanned!)" -> println
}
14
15
16
17

제가 원하는 흘러가는 코드가 조금씩 완성되어 갑니다.

2개의 좋아요