Guile Scheme を使用して端末にパスカルの三角形を出力しようとしています。
パスカルの三角形とは?
スクリプトは次のとおりです。
#!/usr/local/bin/guile \
-e main -s
!#
(define (fact-iter product counter max-count)
(if (> counter max-count)
product
(fact-iter (* counter product) (+ counter 1) max-count)))
(define (factorial n)
(fact-iter 1 1 n))
(define (n-C-r n r)
(/ (factorial n) (* (factorial (- n r)) (factorial r))
)
)
(define (row-iter r l n)
(cond ((= r 0) ((display 1) (row-iter (+ r 1) l n)))
((and (> r 0) (< r l)) ((display (n-C-r l r)) (display " ") (row-iter (+ r 1) l n)))
((= r l) (display 1))
)
)
(define (line-iter l n)
(cond ((<= l n) ( (row-iter 0 l n)
(line-iter (+ l 1) n) ) )
)
)
(define (pascal-triangle n)
(line-iter 0 n) )
(define (main args)
(pascal-triangle (string->number (car (cdr args)) 10))
)
ファイル名はpascalTriangle.scm 上部
のShebang表記はguileへの正しいパスです。chmod +x pascalTriangle.scm
で権限を付与しまし
た コマンド./pascalTriangle.scm を使用してプログラムを実行します 5
上記のスクリプトを実行すると、次の出力/エラーが観察されます。
1Backtrace: in ice-9/boot-9.scm:
157: 5 [catch #t #<catch-closure ac8400> ...]
In unknown file:
?: 4 [apply-smob/1 #<catch-closure ac8400 >]
ice-9/boot-9.scm:
63: 3 [call-with-prompt prompt0 ...]
ice-9/eval.scm:
432: 2 [eval # #]
/home/tarunmaganti/ ./pascalTriangle.scm:
27: 1 [line-iter 0 4]
In unknown file:
?: 0 [#<unspecified> #<unspecified>]エラー: プロシージャ内 #<unspecified>:
エラー: 適用する型が間違っています: #<unspecified>
出力の最初の文字が 1 であることに注意してください。これは、コードがプロシージャrow-iterの最初の部分(表示 1) まで実行され、その後にエラーが発生する可能性があることを意味します。
しかし、出力は、エラーがプロシージャline-iterにあることを示しています。理解できません。
プログラムの誤りを指摘し、パスカルの三角形を表示するように修正していただければ幸いです。
Edit1: エラー/出力テキストを編集し、'<' と '>' を HTML エンティティに置き換えました。角かっこ内のテキストは、以前は表示されませんでした。