4

ここでの基本的な問題は、リストが与えられたときに、そのリストの最後の要素以外のすべての要素を返すことです。たとえば、与えられた (abcd) --> 戻ります (abc)。私は基本的に関数を持っています。それは私が問題を抱えているのはScheme構文だけであり、Googleはあまり友好的ではありません. cons を正しく使用しているかどうかはわかりません。

(define all-but-last
  (lambda (x)

   (if (null? (cdr x)) 
      ('()))
   (cons ((car x) (all-but-last(cdr x)))
)))

r5rs スキームの構文に精通している人が役に立ちます。ありがとう!

4

5 に答える 5

3

'()と の引数を囲む余分な括弧を削除するconsと、コードが機能します (空でない入力リストの場合)。

于 2011-03-10T19:45:01.593 に答える
2

DrRacket を言語 R5RS で使用すると、次のように動作します。

(define all-but-last
  (lambda (x)
   (if (null? x)
     '()
     (if (null? (cdr x)) 
       '()
       (cons (car x) (all-but-last(cdr x)))))))
于 2011-03-10T19:57:41.023 に答える
1

別の解決策:

(define (all-but-last xs)
  (reverse 
    (rest
      (reverse xs))))
于 2012-05-18T09:42:51.830 に答える
0

この質問への回答を参照してください。

リストの最後の要素を削除する(スキーム)

また、これに「宿題」のタグを付けます。そうでない場合は、お知らせください。削除します。

于 2011-03-10T20:22:52.497 に答える