Nim에서도 튀김을 먹었다.

7951 단어 초보자Nim

이 기사에 대하여



이 주제, 정말 초학자에게는 딱 좋네요.

함수형 프로그래밍은 우선 생각에서 이해하자

튀긴 튀김을 보았다.

최근 Nim을 배우고 있기 때문에, Nim판 써 보았습니다.

완전히 잊었습니다만, 전에 PHP에서도 하고 있었습니다.

PHP에서도 튀긴 꼬집어 보았다 - Qiita

환경


  • Nim 0.18.0

  • 구현



    별로 함수형 패러다임은 의식하지 않습니다만, 일일이하는 의식했습니다.
    - var 를 사용하지 않는다(재대입, 파괴적 변경 없음)
    - for 사용하지 않음 (map 사용)

    별로 상관없습니다만, Bento 는 오브젝트의 레퍼런스로 해, 순서에 주소를 갖게 하는 것으로, 주소에 의한 비교를 할 수 있었던 것이 락이었습니다.
    import strutils, sequtils, algorithm
    
    type BentoObj = object
      dish: string
      num: int
    type Bento = ref BentoObj
    
    proc `$`(bento: Bento): string =
      "$1 $2個" % [bento.dish, $bento.num]
    
    proc max(bentos: seq[Bento]): Bento =
      let sorted = bentos.sorted(proc (a, b: Bento): int = b.num - a.num)
      sorted[0]
    
    proc snitchOne(bentos: seq[Bento]): seq[Bento] =
      let max: Bento = max(bentos)
      bentos.map(proc (b: Bento): Bento =
        if (b == max):
          Bento(dish: b.dish, num: b.num - 1)
        else:
          b
      )
    
    proc snitch(num: int, bentos: seq[Bento]): seq[seq[Bento]] =
      result = @[bentos]
    
      if (num > 0):
        result.add(snitch(num - 1, snitchOne(bentos)))
    
    proc main() =
      let bentos: seq[Bento] = @[
        Bento(dish: "唐揚げ", num: 10),
        Bento(dish: "唐揚げ", num: 8),
        Bento(dish: "唐揚げ", num: 6)
      ]
    
      let snitchedBentos = snitch(5, bentos)
      echo snitchedBentos
    
    when isMainModule:
      main()
    

    재미있었습니다

    더 좋은 글이 있습니다.

    좋은 웹페이지 즐겨찾기