Cryptol_04_Caesar contraseña

Código César

  1. Código fuente:

    caesar : {
          
          n} ([8], String n) -> String n //{n}是变量定义,()是变量约束,[8]用于指明位宽,String n表示长度为n的序列,这里的位宽是约束,因为ascii码都是8bit位宽的;
    caesar (s, msg) = [ shift x | x <- msg ] //caesar的定义是,将msg序列依次赋值给x,x进行移位后形成新的序列;
      where   map = ['A' .. 'Z'] <<< s //map的定义是将['A','B'..]这条序列循环左移s;
              shift c=map @ (c - 'A') //shift c的定义是取map序列中的第c-'A'个元素;
    
  2. Cabe señalar que hay dos espacios delante de donde, y el turno está alineado con el mapa de arriba, de lo contrario se informará un error;

  3. Cabe señalar que: la siguiente equivalencia, es decir, la cadena y la secuencia son equivalentes, y el carácter es equivalente al código ASCII correspondiente;

    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    ['A' .. 'Z']
    [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90]
    
  4. Cabe señalar que el comando set ascii = on solo es válido para cadenas, aunque las cadenas y las secuencias son equivalentes;

    Main> :set ascii=on
    Main> "ABC"
    "ABC"
    Main> ['A' .. 'Z']
    [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
     81, 82, 83, 84, 85, 86, 87, 88, 89, 90]
    
  5. Tal vez la primera línea del código aún no se entienda bien, puede consultar la séptima página del documento para una mayor comprensión:

    1. Primero defina un conjunto de variables {n, m, a};
    2. Redefinir el conjunto de restricciones (n * m == 12, Literal 12 a, fin m);
    3. Finalmente, defina la descripción de la salida [n] [m] a, es decir, una secuencia de n de longitud, los elementos de la secuencia son una secuencia de m de longitud y el tipo de cada valor en la secuencia de m de longitud es a;
    4. La restricción literal nos dice que a es un número que puede llegar al menos a 12;
    Cryptol> split [1..12]
    Cannot evaluate polymorphic value.
    Type: {
          
          n, m, a} (n * m == 12, Literal 12 a, fin m) => [n][m]a
    Cryptol> :t split [1..12]
    split [1 .. 12] : {
          
          n, m, a} (n * m == 12, Literal 12 a, fin m) => [n][m]a
    

Supongo que te gusta

Origin blog.csdn.net/weixin_41754258/article/details/112284092
Recomendado
Clasificación