64 lines
1.8 KiB
Scheme
64 lines
1.8 KiB
Scheme
;;seperate a long line into pieces, each fitting into a smaller line.
|
|
(define (seperate-line line width)
|
|
(let loop ((new '())
|
|
(old line))
|
|
(if (> width (string-length old))
|
|
(if (= 0 (string-length old))
|
|
(if (equal? new '())
|
|
'("")
|
|
new)
|
|
(append (list old) new))
|
|
(let ((next-line (substring old 0 width))
|
|
(rest-old (substring old width (string-length old))))
|
|
(loop (cons next-line new) rest-old)))))
|
|
|
|
;;the result is the "answer" of scsh
|
|
(define (layout-result-standard result-str width)
|
|
(reverse (seperate-line result-str width)))
|
|
|
|
;useful helpers
|
|
;;; EK: useful for what=
|
|
(define (get-marked-positions-1 all-items marked-items)
|
|
(let loop ((count 0)
|
|
(result '()))
|
|
(if (>= count (length all-items))
|
|
result
|
|
(let ((act-item (list-ref all-items count)))
|
|
(if (member act-item marked-items)
|
|
(loop (+ count 1)
|
|
(append result (list (+ count 1))))
|
|
(loop (+ count 1) result))))))
|
|
|
|
(define (get-marked-positions-2 all-items marked-items)
|
|
(let loop ((count 0)
|
|
(result '()))
|
|
(if (>= count (length all-items))
|
|
result
|
|
(let ((act-item (list-ref all-items count)))
|
|
(if (member act-item marked-items)
|
|
(loop (+ count 1)
|
|
(append result (list (+ count 2))))
|
|
(loop (+ count 1) result))))))
|
|
|
|
(define (get-marked-positions-3 all-items marked-items)
|
|
(let loop ((count 0)
|
|
(result '()))
|
|
(if (>= count (length all-items))
|
|
result
|
|
(let ((act-item (list-ref all-items count)))
|
|
(if (member act-item marked-items)
|
|
(loop (+ count 1)
|
|
(append result (list (+ count 3))))
|
|
(loop (+ count 1) result))))))
|
|
|
|
;;expression as string
|
|
(define (exp->string exp)
|
|
(let ((exp-port (open-output-string)))
|
|
(write exp exp-port)
|
|
(get-output-string exp-port)))
|
|
|
|
(define (sublist l pos k)
|
|
(let ((tmp (list-tail l pos)))
|
|
(reverse (list-tail (reverse tmp)
|
|
(- (length tmp) k)))))
|