0
私は現在、ラケットで逆ポーランド記法プログラムを作成しようとしています。私は6つの数字と5つの演算子を持ちたいと思います。演算子はリストに-1で表され、数字はリストで-1で表されます。ラケットRPN検証ツール
以下のコードでは、重複のないリストのすべての順列を得ることができます。有効なRPNの場合は、開始時に2つの数字を、最後に1つの演算子が必要なため、リストの先頭に2つの-1を追加し、最後に1を追加します。
;This our original list to create reverse polish notation -1 will represent operators
;and 1 will represent numbers. It doesnt have two -1's and one 1 because for valid
;reverse polish notaion it needs to start with two nummbers and end with an operator
(define start-perm (list -1 -1 -1 -1 1 1 1 1))
;This line creates all permutations of the original RPN list and it removes the duplicates
(define perms (remove-duplicates (permutations start-perm)))
;This function adds the two 1s to the front of the list and the -1 to the end of the list
(define (make-rpn l)
(append (list 1 1) l (list -1)))
(make-rpn (car perms))
; adds 1 1 to start of all permutations and adds -1 to the end of all permutations
(map make-rpn perms)
問題は、有効なRPNだけが出力できないことです。研究を通して、スタックが最良のアプローチだと思われますが、このコードに実装されているようです。どんな助けでも大歓迎です。