-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlu.lsp
126 lines (118 loc) · 3.15 KB
/
lu.lsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
(defun get-el
(matr i j)
(nth j
(nth i matr)))
(defun create-list
(n &optional
(acc '
())
(i 1))
(if
(> i n)
(reverse acc)
(create-list n
(cons i acc)
(1+ i))))
(defun u-elem
(a i j)
(cond
(
(> i j) 0)
( (<= i j)
(-
(get-el a i j)
(reduce #'+
(mapcar #'*
(mapcar #'
(lambda
(x)
(l-elem a i
(- x 1)))
(create-list i))
(mapcar #'
(lambda
(x)
(u-elem a
(- x 1) j))
(create-list i))))))))
(defun l-elem
(a i j)
(cond
(
(< i j) 0)
( (= i j) 1)
( (> i j)
(/
(-
(get-el a i j)
(reduce #'+
(mapcar #'*
(mapcar #'
(lambda
(x)
(l-elem a i
(- x 1)))
(create-list j))
(mapcar #'
(lambda
(x)
(u-elem a
(- x 1) j))
(create-list j)))))
(u-elem a j j)))))
(defun lu_j_rec
(a elem i j len)
(cond
(
(< j 0) nil)
( (>= j 0)
(append
(lu_j_rec a elem i
(- j 1) len)
(list
(funcall elem a i j))))
))
(defun lu_i_rec
(a elem i len)
(cond
( (= i 0)
(list
(lu_j_rec a elem i
(-
(length
(car a)) 1)
(-
(length
(car a)) 1))))
( (> i 0)
(append
(lu_i_rec a elem
(- i 1) len)
(list
(lu_j_rec a elem i
(-
(length
(car a)) 1)
(-
(length
(car a)) 1)))))
))
(defun lu
(a)
(list
(lu_i_rec a 'l-elem
(-
(length a) 1)
(-
(length a) 1))
(lu_i_rec a 'u-elem
(-
(length a) 1)
(-
(length a) 1))))
(print
(lu '
(
(10 -3 1)
(4 5 0)
(1 2 7))))