Куча говна / Говнокод #26741 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
#lang racket

(require racket/syntax)

(define-syntax (_total stx)
  (syntax-case stx ()
    [(_total item price amount)
     (let ([make-id
            (lambda (template . ids)
              (let ([str (apply format template (map syntax->datum ids))])
                (datum->syntax stx (string->symbol str))))])
       (with-syntax ([total-item-price (make-id "~a-price" #'item)]
                     )
         #'(begin
             (total-item-price price amount)
             )))]
    )
  )

(define-syntax-rule (total item price amount)
  (cond [(eq? item 'apple) (_total apple price amount)]
        [(eq? item 'grape) (_total grape price amount)]
        [else (_total general price amount)]
        )
  )
  

(define (apple-price price amount)
  (* price (- amount (/ amount 2)))
  )

(define (grape-price price amount)
  (* price (if (> amount 1) (/ (* amount 4) 5) amount))
  )

(define (general-price price amount)
  (* amount price)
  )

(define apples '(apple 10 4))
(define grapes '(grape 20 3))
(define other '(peach 30 1))

(foldl (λ (lst result)
         (+ result (total (car lst) (cadr lst) (caddr lst)))
         )
       0
       (list apples grapes other)
 )

Когда у тебя есть macroмолоток, всё остальное кажется гвоздями.

Запостил: Desktop Desktop, (Updated )

Комментарии (17) RSS

    • gost, не хочешь сделать на ngk поиск по хешам? Чтобы хеши в комментариях были интерактивными и по нажатию на хеш открывался список комментариев с его упоминанием. Говнотвиттер такой себе.
      Ответить
      • Передали в инженерный отдел. В принципе, на первый взгляд достаточно на клиенте просто расставить ссылки на https://gcode.space/#!/search?q="%23хэштег". А вот серверная оптимизация этого добра… Хм, таблица с тегами, таблица «comment_id,tag_id», при добавлении сканировать коммент на предмет тегов и добавлять кортеж (comment_id, tag_id), в поиске получать tag_id… По идее, можно и заморочиться.
        Ответить
        • Да, плюс питонячьи комментарии надо как-то отличать.

          Что-то сложно выходит.
          Ответить
  • > (car lst) (cadr lst) (caddr lst)
    > '(apple 10 4))

    Ну вот и «массив» из той задачи. Даже в лиспах выглядит изящно.
    А у джавашка «типы мосивов в ЙАЖ_VM», «питумизированные пирименные», прочий пирдолинг.
    Ответить
    • Да, зашквар какой-то.

      З.Ы. Интересно, они имеют какой-то особый смысл или просто все сорта скобок можно юзать?
      Ответить
      • Погуглил... Один чувак на «ЛОРе» написа́л, что навелосипедил квадратные скобки в «Лиспе»:
        https://github.com/Lovesan/bike/blob/master/src/syntax.lisp

        Т. е. в «Лиспе» нужно сочинять специальный макрос, чтобы они обрабатывались.

        А вот в «Racket», оказывается, круглые и квадратные взаимозаменяемы. Два типа скобок, чтобы программа была не «write-only», т. е. чтобы программисту самому было легче отследить баланс скобок.
        Ответить
          • С ненавистью использует квадратные скобки в «Лиспе», чтобы рэкетолюбам сделать неприятно.
            Ответить
      • The use of square brackets for cond clauses is a convention. In Racket, parentheses and square brackets are actually interchangeable, as long as ( is matched with ) and [ is matched with ]. Using square brackets in a few key places makes Racket code even more readable.

        https://docs.racket-lang.org/guide/syntax-overview.html

        Т. е. для «читаемости» принято условия записывать в квадратных скобках, остальное — в круглых. Это как одинарные и двойные кавычки в жопоскрипте.
        Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8