Guest User

Untitled

a guest
May 27th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. (define-syntax hoge
  2. (syntax-rules ()
  3. ((_ x)
  4. (hoge "hoge" x))
  5.  
  6. ((_ "hoge" x)
  7. (let ()
  8. (print x)
  9. (print "hoge")))))
  10.  
  11.  
  12. (hoge 'valvallow)
  13. ;; valvallow
  14. ;; hoge
  15. ;; #<undef>
  16. (macroexpand '(hoge 'valvallow))
  17. ;; (#<identifier user#let> ()
  18. ;; (#0=#<identifier user#print> 'valvallow)
  19. ;; (#0# "hoge"))
  20.  
  21. (hoge "hoge" 'valvallow)
  22. ;; valvallow
  23. ;; hoge
  24. ;; #<undef>
  25. (macroexpand '(hoge "hoge" 'valvallow))
  26. ;; (#<identifier user#let> ()
  27. ;; (#0=#<identifier user#print> 'valvallow)
  28. ;; (#0# "hoge"))
  29.  
  30. (hoge "hoge")
  31. ;; hoge
  32. ;; hoge
  33. ;; #<undef>
  34. (macroexpand '(hoge "hoge"))
  35. ;; (#<identifier user#let> ()
  36. ;; (#0=#<identifier user#print> "hoge")
  37. ;; (#0# "hoge"))
  38.  
  39.  
  40.  
  41. (define (p l1 l2)
  42. (format #t " x:~a - y:~a\n" l1 l2))
  43.  
  44. (define-syntax print-reverse-list
  45. (syntax-rules ()
  46. ((_ (x ...))
  47. (print-reverse-list "sub" (x ...)()))
  48.  
  49. ((_ "sub" (x1 x2 ...)())
  50. (begin
  51. (p '(x1 x2 ...)())
  52. (print-reverse-list "sub" (x2 ...)(x1))))
  53.  
  54. ((_ "sub" (x1 x2 ...)(y ...))
  55. (begin
  56. (p '(x1 x2 ...)'(y ...))
  57. (print-reverse-list "sub" (x2 ...)(x1 y ...))))
  58.  
  59. ((_ "sub" (x)(y1 y2 ...))
  60. (print-reverse-list "sub" ()(x y1 y2 ...)))
  61.  
  62. ((_ "sub" ()(y ...))
  63. (p '() '(y ...)))))
  64.  
  65. (print-reverse-list (1 2 3 4 5))
  66. ;; x:(1 2 3 4 5) - y:()
  67. ;; x:(2 3 4 5), y:(1)
  68. ;; x:(3 4 5), y:(2 1)
  69. ;; x:(4 5), y:(3 2 1)
  70. ;; x:(5), y:(4 3 2 1)
  71. ;; x:(), y:(5 4 3 2 1)
  72. ;; #<undef>
  73. (print-reverse-list (1))
  74. ;; x:(1) - y:()
  75. ;; x:(), y:(1)
  76. ;; #<undef>
  77. (print-reverse-list ())
  78. ;; x:(), y:()
Add Comment
Please, Sign In to add comment