lspfns.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. function caar(x: any): any;
  2. begin
  3. caar := car(car(x))
  4. end;
  5. function cadr(x: any): any;
  6. begin
  7. cadr := car(cdr(x))
  8. end;
  9. function cdar(x: any): any;
  10. begin
  11. cdar := car(cdr(x))
  12. end;
  13. function cddr(x: any): any;
  14. begin
  15. cddr := cdr(cdr(x))
  16. end;
  17. function prin2(x: any): any;
  18. begin
  19. end;
  20. function rev(l1: any): any;
  21. begin
  22. end;
  23. function notnull(x: any): any;
  24. begin
  25. notnull := x
  26. end;
  27. function list2(r1, r2: any): any;
  28. begin
  29. list2 := cons(r1, ncons(r2))
  30. end;
  31. function list3(r1, r2, r3: any): any;
  32. begin
  33. list3 := cons(r1, list2(r2, r3))
  34. end;
  35. function list4(r1, r2, r3, r4: any): any;
  36. begin
  37. list4 := cons(r1, list3(r2, r3, r4))
  38. end;
  39. function list5(r1, r2, r3, r4, r5: any): any;
  40. begin
  41. list5 := cons(r1, list4(r2, r3, r4, r5))
  42. end;
  43. function reverse(u: any): any;
  44. begin
  45. reverse := rev(u)
  46. end;
  47. function append(u, v: any): any;
  48. function append1: any;
  49. begin
  50. junk := setq(u, reverse(u));
  51. while truep(pairp(u)) do
  52. begin
  53. junk := setq(v, cons(car(u), v));
  54. junk := setq(u, cdr(u)) (* a hard case *)
  55. end;
  56. append := v (* goto also needed? *)
  57. end;
  58. begin
  59. append := append1;
  60. end;
  61. (* procedures to support get & put. *)
  62. function memq(u, v: any): any;
  63. begin
  64. if truep(xnot(pairp(v))) then memq := v
  65. else if truep(eq(u, car(v))) then memq := v
  66. else memq := memq(u, cdr(v))
  67. end;
  68. function atsoc(u, v: any): any;
  69. begin
  70. if truep(xnot(pairp(v))) then atsoc := v
  71. else if truep(xnot(pairp(v))) or truep(xnot(eq(u, caar(v)))) then
  72. atsoc := atsoc(u, cdr(v))
  73. else atsoc := car(v)
  74. end;
  75. function delq(u, v: any): any;
  76. begin
  77. if truep(xnot(pairp(v))) then delq := v
  78. else if truep(eq(u, car(v))) then delq := cdr(v)
  79. else delq := cons(car(v), delq(u, cdr(v)))
  80. end;
  81. function delatq(u, v: any): any;
  82. begin
  83. if truep(xnot(pairp(v))) then delatq := v
  84. else if truep(xnot(pairp(car(v)))) or truep(xnot(eq(u, caar(v)))) then
  85. delatq := cons(car(v), delatq(u, cdr(v)))
  86. else delatq := cdr(v)
  87. end;
  88. function get(u, v:any): any;
  89. begin
  90. if truep(xnot(idp(u))) then get := xnil
  91. else if truep(pairp(setq(u, atsoc(v, plist(u))))) then get := cdr(u)
  92. else get := xnil
  93. end;
  94. function put(u, v, ww: any): any;
  95. function put1: any;
  96. label 1;
  97. var l: any;
  98. begin
  99. if truep(xnot(idp(u))) then
  100. begin
  101. put1 := ww;
  102. goto 1
  103. end;
  104. junk := setq(l, plist(u));
  105. if truep(atsoc(v, l)) then junk := delatq(v, l);
  106. if truep(notnull(ww)) then junk := setq(l, cons(cons(v, ww), l));
  107. junk := setplist(u, l);
  108. begin
  109. put1 := ww;
  110. goto 1
  111. end;
  112. 1:
  113. end;
  114. begin
  115. put := put1
  116. end;
  117. function remprop(u, v: any): any;
  118. begin
  119. remprop := put(u, v, xnil)
  120. end;
  121. function eqcar(u, v: any): any;
  122. begin
  123. if truep(pairp(u)) then
  124. if truep(eq(car(u), v)) then eqcar := t
  125. else eqcar := xnil
  126. end;
  127. function null(u: any): any;
  128. begin
  129. null := eq(u, xnil)
  130. end;
  131. function equal(x, y: any): any;
  132. begin
  133. if truep(atom(x)) then
  134. if truep(atom(y)) then
  135. equal := eq(x, y)
  136. else equal := xnil
  137. else if truep(atom(y)) then equal := xnil
  138. else if truep(equal(car(x), car(y))) then
  139. if truep(equal(cdr(x), cdr(y))) then equal := t
  140. else equal := xnil
  141. else equal := xnil
  142. end;
  143. function read;
  144. begin
  145. end;