Am unsure whether making `brcmk-end` optional is possible for interactive use.  If one can have optional arguments, what would be the changed necessary?  Would the interactive expression change?

```lisp

    (defun rk-bracemk-count-2 (brcmk-beg brcmk-end rgn-beg rgn-end)
      "Count brace marks within a selected region.
    
    BRCMK-BEG  Opening brace mark.
    BRCMK-END  Closing brace mark.
    RGN-BEG    Region start marker or position.
    RGN-END    Region end marker or position."
    
      (interactive
       (list (read-char-from-minibuffer "Opening bracemark: ")
             (read-char-from-minibuffer "Closing bracemark: ")
             (region-beginning)
             (region-end) ))
      
      (save-excursion
        (let ( ($a  0) ($b  0) 
               ($begmk  (char-to-string brcmk-beg))
               ($endmk  (char-to-string brcmk-end)) )
    
          (goto-char rgn-beg)
          (while (and (< (point) rgn-end)
                      (search-forward $begmk rgn-end t))
            (cl-incf $a))
    
          (goto-char rgn-beg)
          (while (and (< (point) rgn-end)
                      (search-forward $endmk rgn-end t))
            (cl-incf $b))
    
          (message "Marks: %s %s  Counts: %d %d" $begmk $endmk $a $b)
          (goto-char rgn-beg) )))