3

私は関数型プログラミングの初心者で、値をコンソールからリストに読み込み、そのリストをパラメーターとして渡し、Scheme でリストの合計を返すことができるようにしたいと考えています。

この結果を取得したい: (display (sum-list-members '(1 2 3 4 5))) しかし、ユーザーはコンソールでこれらの値を入力する必要があります。

これは私が取り組んでいるものです:

(begin

    (define count 0)


    (define sum-list-members
      (lambda (lst)
        (if (null? lst)
        0
        (+ (car lst) (sum-list-members (cdr lst))))))


    (display "Enter a integer [press -1 to quit]: ")
    (newline)

    (let loop ((i 0))               

        (define n(read))
        (sum-list-members (list n))

            (set! count i)      
            (if (not(= n -1))               

        (loop (+ i 1)))

    )

    (newline)

)
4

2 に答える 2

0

チキンスキームを使用すると、次のようになります。

(define (read-number-list)
  (map string->number (string-tokenize (read-line))))

次のように定義しますsum-list-members

(define (sum-list-members lst)
   (fold + 0 lst))

string-tokenize仕事を始めるには、特定のsrfi. Fold は、関数と初期値をパラメーターとして受け取る関数であることを除いて、あなたが書いたものとほとんど同じです。

関数は 2 つのパラメーターを受け取る必要があります。最初のパラメーターは現在の値で、2 番目のパラメーターは前の呼び出しによって返された値または初期値です。

于 2013-11-03T10:51:10.293 に答える
-1
(do ((mlist () (cons n mlist))(n (read)(read)))
    ((= n -1) (display (apply + mlist))))
于 2013-11-02T19:38:08.150 に答える