如何垂直逐个元素打印列表?球拍
How to print a list element by element vertically? Racket
我是 Racket 的菜鸟,我想弄清楚如何垂直打印一个列表的元素,因此:
(printv '(1 2 3 4))
1
2
3
4
T
我尝试使用 if 和 cond,因此:
(define (delete x lst)
(cond [(member x lst)(append(reverse(rest(member x(reverse lst))))(rest(member x lst)))]
[else "Error"]
))
(define (printv lst)
(cond [(< 0 (length lst)) ((printf "~a ~%" (first lst))(printv (delete (first lst) lst)))]
[else "T"]))
但是当列表变空时我得到了这个错误
application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...:
感谢帮助
您应该使用内置程序让您的生活更轻松。为什么要删除元素?只是遍历列表。试试这个:
(define (printv lst)
(for-each displayln lst)
(displayln "T"))
只需删除多余的括号即可解决您的问题:
(define (printv lst)
(cond [(< 0 (length lst))
(printf "~a ~%" (first lst))
(printv (delete (first lst) lst))]
[else "T"]))
一些提示:
在每次迭代中执行 length
会使您的函数呈指数级增长。例如。将列表加倍以显示正方形所需的时间。检查列表是否为空的更好方法是使用 (empty? lst)
如何使用 delete
获取列表的 rest
可能是我见过的最复杂的方法。由于您知道要删除第一个元素,因此可以将其替换为 (rest lst)
.
只是打印换行有一个功能:displayln
全部合并:
(define (printv lst)
(cond [(empty? lst) "T"]
[else
(displayln (first lst))
(printv (rest lst))]))
纯方案版本:
(define (printv lst)
(cond [(null? lst) "T"]
[else
(display (car lst))
(newline)
(printv (cdr lst))]))
我是 Racket 的菜鸟,我想弄清楚如何垂直打印一个列表的元素,因此:
(printv '(1 2 3 4))
1
2
3
4
T
我尝试使用 if 和 cond,因此:
(define (delete x lst)
(cond [(member x lst)(append(reverse(rest(member x(reverse lst))))(rest(member x lst)))]
[else "Error"]
))
(define (printv lst)
(cond [(< 0 (length lst)) ((printf "~a ~%" (first lst))(printv (delete (first lst) lst)))]
[else "T"]))
但是当列表变空时我得到了这个错误
application: not a procedure;
expected a procedure that can be applied to arguments
given: #<void>
arguments...:
感谢帮助
您应该使用内置程序让您的生活更轻松。为什么要删除元素?只是遍历列表。试试这个:
(define (printv lst)
(for-each displayln lst)
(displayln "T"))
只需删除多余的括号即可解决您的问题:
(define (printv lst)
(cond [(< 0 (length lst))
(printf "~a ~%" (first lst))
(printv (delete (first lst) lst))]
[else "T"]))
一些提示:
在每次迭代中执行 length
会使您的函数呈指数级增长。例如。将列表加倍以显示正方形所需的时间。检查列表是否为空的更好方法是使用 (empty? lst)
如何使用 delete
获取列表的 rest
可能是我见过的最复杂的方法。由于您知道要删除第一个元素,因此可以将其替换为 (rest lst)
.
只是打印换行有一个功能:displayln
全部合并:
(define (printv lst)
(cond [(empty? lst) "T"]
[else
(displayln (first lst))
(printv (rest lst))]))
纯方案版本:
(define (printv lst)
(cond [(null? lst) "T"]
[else
(display (car lst))
(newline)
(printv (cdr lst))]))