2015-12-02 49 views
0

好吧,我真的很糟糕的計劃,我一直在卡住這個功能(看它是一個非常簡單的修復)。我想寫一個關於列表輸入是否是一個包的函數(一個包是元組中的第一個數字是值的第二個數字是一個元組列表,而且每個值都不應該重複並從最小到最大排序)。這是我有...語法可能是太可怕了......方案函數元組檢查

(define (bag? qbag) 
    (cond ((null? qbag) #t) 
     (if(eqv? (pair? (car qbag)) #t) 
      (baghelp (cdr qbag) (car(car qbag)))) 
     (else (#f)))) 

(define (baghelp qbag x) 
(cond((null? qbag) #t) 
     (if(and(if (eqv? (pair? (car qbag)) #t)) 
      (if (< x (car(car qbag))))) 
     (baghelp (cdr qbag) (car(car qbag))) 
     (else(#f))))) 

樣本輸入輸出:

(bag? '((0 1))) 
#f 
(bag? '()) 
#t 
(bag? '10) 
#f 
(bag? '((5 2) (4 3))) 
#f 
(bag? '((5 2) (7 3))) 
#t 
(bag? '((5 1 0))) 
#f 
(bag? '((5 5) (5 2))) 
#f 
+0

您可以添加示例輸入和輸出嗎? – uselpa

+1

請使用正確的縮進。如果沒有它,就無法閱讀類似lisp的語言的代碼.... –

+0

@KarolyHorvath s/without it //'FIFY lol j/k/s –

回答

2

是你的語法是相當糟糕。 cond內使用if的方式和(#f)這樣的表達方式使我認爲你到目前爲止避免了Scheme文獻......真的,閱讀好教程,這是必須的。

這裏是我會怎麼寫一個例子本(或多或少,我會分解出的(car bag)(caar bag)重複使用,但這種方式可能是更具可讀性給您):

(define (bag? bag) 
    (and (list? bag) (bag-help bag '()))) 

(define (bag-help bag last-val) 
    (or (null? bag) 
     (and (list? (car bag)) 
      (> (caar bag) 0) 
      (= 2 (length (car bag))) 
      (or (null? last-val) (< last-val (caar bag))) 
      (bag-help (cdr bag) (caar bag))))) 

這通過所有你的測試,並有你在評論中提到的其他限制。

+1

@ uselpa非常感謝你的幫助,我已經閱讀了一些關於它的內容,但是對於這個課程,我們不斷地改變語言,並結合其他課程,我沒有時間按照自己的意願去研究一次,一次該學期結束了(耶冬假期)我打算深入研究它,並希望大大改善我的語法,我不知道它是關於方案,但我似乎無法把握它,我需要找到一個非常好的一步一步的教程,我剛剛使用scheme.com作爲參考 – elvenmagick

+0

Little Schemer是一個很好的介紹。簡單的方案是一箇中間參考,SICP是一個大問題。 – WorBlux