Skip to content

Instantly share code, notes, and snippets.

@Manjago
Created October 12, 2024 15:56
Show Gist options
  • Select an option

  • Save Manjago/7d336614749a75e28efeebb0100cc707 to your computer and use it in GitHub Desktop.

Select an option

Save Manjago/7d336614749a75e28efeebb0100cc707 to your computer and use it in GitHub Desktop.

Извиняюсь за путаницу. Давай исправим это и посмотрим на реализацию 3MIRROR и других функций заново.

Исправленная реализация

  1. 3MIRROR: Давай исправим эту функцию, чтобы она корректно дублировала и зеркально отражала три элемента:

    : 3MIRROR ( a b c -- a b c c b a )
    2DUP ROT >R 2DUP R> SWAP ;

    Здесь мы используем 2DUP для дублирования первых двух элементов, ROT и >R для временного хранения третьего элемента, и затем восстанавливаем порядок с помощью R> и SWAP.

  2. S3D и B6: Вернемся к более простой реализации, но с учетом правильной работы стека:

    : S3D ( a b c -- S ) 
    2DUP * >R        \ a*b -> R: a*b
    SWAP OVER *      \ b*c
    R> +             \ a*b + b*c
    ROT OVER * +     \ a*b + b*c + a*c
    2* ;             \ 2 * (a*b + b*c + a*c)
    
    : B6 ( a b c -- S V )
    2DUP * >R        \ a*b -> R: a*b
    2DUP SWAP OVER * \ b*c
    R> +             \ a*b + b*c
    ROT OVER * + 2*  \ 2 * (a*b + b*c + a*c)
    SWAP ROT * * ;   \ V = a*b*c

Проверка

Давай убедимся, что тесты проходят:

S" test/ttester.fs" included

t{ 1 2 3 3MIRROR -> 1 2 3 3 2 1 }t
t{ 2 3 5 V3D -> 30 }t
t{ 2 3 5 S3D -> 62 }t
t{ 2 3 5 B6 -> 62 30 }t
t{ 1 2 3 B6 -> 22 6 }t

Попробуй эти изменения и проверь, проходят ли тесты. Если что-то все еще не так, дай знать, и мы продолжим разбираться!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment