Guest User

Untitled

a guest
Aug 26th, 2021
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. -module(link).
  2.  
  3. -compile(export_all).
  4.  
  5. main(Psi) ->
  6. {_, List} = generate(top, Psi),
  7. iolist_to_binary(List).
  8.  
  9. g(top) ->
  10. [
  11. [{intro}, idrather]
  12. ];
  13. g(idrather) ->
  14. [
  15. [<<"I'd rather">>, action]
  16. ];
  17. g(intro) ->
  18. [
  19. [adj_holy, [adj_holy], [adj], god, {adverb}, <<",">>]
  20. ];
  21. g(action) ->
  22. [
  23. [<<"eat">>, substance],
  24. [<<"drink">>, substance, <<"smoothie">>],
  25. [<<"fuck">>, animal],
  26. [<<"take it from">>, animal]
  27. ];
  28. g(subject) ->
  29. [
  30. [article, [adj], noun]
  31. ];
  32. g(adverb) ->
  33. [
  34. [<<"in a bag of">>, substance]
  35. ];
  36. g(animal) ->
  37. [
  38. [article, {adj}, n_animal]
  39. ];
  40. g(n_animal) ->
  41. dict(["cow", "dog", "goat", "rooster"]);
  42. g(god) ->
  43. dict(["baby Jesus", "Jesus", "God", "cow", "virgin Mary"]);
  44. g(substance) ->
  45. [
  46. [{someones}, n_substance]
  47. ];
  48. g(someones) ->
  49. [
  50. [animal, <<"='s">>],
  51. [god, <<"='s">>]
  52. ];
  53. g(n_substance) ->
  54. dict(["piss", "shit", "jizz", "pee"]);
  55. g(adj_holy) ->
  56. dict(["sweet", "holy", "almighty"]);
  57. g(adj) ->
  58. [
  59. [<<", soaked in">>, substance, <<",">>],
  60. [substance, <<"=-flavored">>]
  61. |dict(["rotten", "rabid", "putrid", "dead", "deceased", "dead", "tap-dancing", "worm-infested"])
  62. ];
  63. g(verb) ->
  64. dict(["eat", "fuck", "flagellate"]);
  65. g(noun) ->
  66. dict(["goat", "dog", "granpa"]);
  67. g(article) ->
  68. dict(["a"]);
  69. g(A) ->
  70. [[atom_to_binary(A, utf8)]].
  71.  
  72. generate({_Optional}, 0) ->
  73. %% When we run out of psihoza, we should not generate optional
  74. %% terms:
  75. {0, []};
  76. generate({Optional}, Psi) ->
  77. case rand:uniform(2) of
  78. 1 -> {Psi, []};
  79. 2 -> generate(Optional, Psi)
  80. end;
  81. generate([_], 0) ->
  82. {0, []};
  83. generate([Repeat], Psi0) ->
  84. case rand:uniform(2) of
  85. 1 -> {Psi0, []};
  86. 2 ->
  87. {Psi1, Hd} = generate(Repeat, Psi0),
  88. {Psi, Tl} = generate([Repeat], Psi1),
  89. {Psi, [Hd|Tl]}
  90. end;
  91. generate(Tree, Psi) when is_atom(Tree) ->
  92. Voretions = g(Tree),
  93. Pos = rand:uniform(length(Voretions)),
  94. Tokens = lists:nth(Pos, Voretions),
  95. lists:foldr(fun do_generate/2, {Psi, []}, Tokens);
  96. generate(Terminal, _) when is_binary(Terminal) ->
  97. {1, [<<" ">>, Terminal]}.
  98.  
  99. do_generate(Term, {Psi0, Acc}) ->
  100. {Psi, Hd} = generate(Term, Psi0),
  101. {Psi, [Hd|Acc]}.
  102.  
  103. dict(L) ->
  104. [[list_to_binary(I)] || I <- L].
  105.  
Add Comment
Please, Sign In to add comment