簡體   English   中英

r5rs:不是程序錯誤

[英]r5rs: Not a procedure errors

這是我出來的代碼(顯示所有長度為n的平衡括號對)

(define (combine-list l r)
(append l  (cons r '())))

;(combine-list '(1 2 3) '(4 4))

(define(bps n)
  (bps-iter '() (/ n 2) 0 0))


(define (bps-iter lst n open close) (;(display open) (display close) (display "\n")
  (cond ((eq? n close) (display lst)) 
        (else ((if (> open close)
                        (bps-iter (combine-list lst 1) n open (+ 1 close) ))
              (if (< open n)
                       (bps-iter (combine-list lst 0) n (+ open 1) close))) 
       )
        )))

(bps 4)

結果是

application: not a procedure;
expected a procedure that can be applied to arguments
  given: #<void>
  arguments...: [none]

完成調用(等價嗎?n關閉)並返回“ else”以尋找另一組括號時,是否存在任何問題?

您的問題是:

((if (> open close)
     (bps-iter (combine-list lst 1) n open (+ 1 close)))
 (if (< open n)
     (bps-iter (combine-list lst 0) n (+ open 1) close)))

具有以下結構:

((if predicate
     consequence
     'undefined)
 (if predicate2
     consequence2
     'undefined))

並且兩個的結果( ifbps-iter或某個未定義的值)。假設兩個可以縮寫為if-exp1和if-expr2,則得到:

(if-expr1 if-expr2)

由此可以斷定,如果predicate1不正確,您將嘗試調用undefined,就好像它是一個函數一樣,如果是true,則bts-iter至少應返回一個函數。 由於這些都不是真的,所以注定會失敗。

如何使用:

(if predicate
    consequence
    alternative) ; optional in R6RS, turns into undefined

這些可以嵌套。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM