数学で説明します。Schemeコードを書くのに苦労している変換は次のとおりです。
(f '(a b c) '(d e f)) = '(ad (+ bd ae) (+ cd be af) (+ ce bf) cf)
2つの文字が一緒にあるようなad
意味(* a d)
です。
私は純粋関数型の方法でそれを書き込もうとしていますが、その方法を理解するのに苦労しています。任意の提案をいただければ幸いです。
ここではいくつかの例を示します。
(1mul '(0 1) '(0 1)) = '(0 0 1)
(1mul '(1 2 3) '(1 1)) = '(1 3 5 3)
(1mul '(1 2 3) '(1 2)) = '(1 4 7 6)
(1mul '(1 2 3) '(2 1)) = '(2 5 8 3)
(1mul '(1 2 3) '(2 2)) = '(2 6 10 6)
(1mul '(5 5 5) '(1 1)) = '(5 10 10 5)
(1mul '(0 0 1) '(2 5)) = '(0 0 2 5)
(1mul '(1 1 2 3) '(2 5)) = '(2 7 9 16 15)
したがって、パターンは最初に投稿したもののようです。
リストの最初の数字に2番目のリストのすべての数字(ad、ae、af)を掛けてから、続けて(bd、be、bf、cd、ce、cf)、数字を「なんとかして」並べて、対応する数字を追加します。値。私がそれをオーバーラップと呼ぶ理由は、次のように視覚化できるからです。
(list
aa'
(+ ba' ab')
(+ ca' bb' ac')
(+ cb' bc')
cc')
また、
(f '(a b c) '(d e f)) = '(ad (+ bd ae) (+ cd be af) (+ ce bf) cf)
ただし、3x3リストだけでなく、任意のサイズのリストの場合。