热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

scheme矩阵运算

基于表:(define(accumulateopinitseq)  (cond    [(null?seq)init]   [else     (op(carseq) 


基于表:

( define ( accumulate op init seq )
   ( cond 
      [ ( null? seq ) init ]
      [ else 
        ( op ( car seq )
             ( accumulate op init ( cdr seq ) ) ) ] ) )

( define ( accumulate-n op init seqs )
   ( cond 
      [ ( null? ( car seqs ) ) ‘() ]
      [ else 
        ( cons ( accumulate op init ( map car seqs ) )
               ( accumulate-n op init ( map cdr seqs ) ) ) ] ) )

( define ( dot-product v m )
   ( accumulate + 0 ( map * v m ) ) )

( define ( mat-*-vec mat vec )
   ( map ( lambda ( row )( dot-product row vec ) ) mat ) )

( define ( transpose mat )
   ( accumulate-n cons ‘() mat ) )

( define ( mat-*-mat m n )
   ( let ( [ n ( transpose n ) ] )
      ( map ( lambda ( row )( mat-*-vec n row ) ) m ) ) )


基于vector:

#!r6rs
( import ( rnrs ) )

( define type-error 
   ( lambda ( what )
      ( assertion-violation ‘mul "not a number or matrix" what ) ) )

( define match-error 
   ( lambda ( what1 what2 )
      ( assertion-violation ‘mul "incompatible operands" what1 what2 ) ) )

( define make-matrix 
   ( lambda ( rows cols )
      ( do ( [ mat ( make-vector rows ) ]
             [ r 0 ( + r 1 ) ] )
         ( ( = r rows ) mat )
         ( vector-set! mat r ( make-vector cols ) ) ) ) )

( define matrix? 
   ( lambda ( mat )
      ( and ( vector? mat )
            ( vector? ( vector-ref mat 0 ) )
            ( > ( vector-length mat ) 0 ) ) ) )

( define matrix-ref 
   ( lambda ( mat row col )
      ( vector-ref ( vector-ref mat row ) col ) ) )

( define matrix-set!
   ( lambda ( mat row col val )
      ( vector-set! ( vector-ref mat row ) col val ) ) )

( define matrix-rows ( lambda ( mat )( vector-length mat ) ) )
( define matrix-cols ( lambda ( mat )( vector-length ( vector-ref mat 0 ) ) ) )

( define mat-*-vec
   ( lambda ( mat vec )
      ( let* ( [ rows ( matrix-rows mat ) ]
               [ cols ( matrix-cols mat ) ]
               [ res ( make-matrix rows cols ) ] )
         ( do ( [ r 0 ( + r 1 ) ] )
            ( ( = r rows ) res )
            ( do ( [ c 0 ( + c 1 ) ] )
               ( = c cols )
               ( vector-set! res r c ( * vec ( matrix-ref mat r c ) ) ) ) ) ) ) )

( define mat-*-mat
   ( lambda ( mat1 mat2 )
      ( let* ( [ rows1 ( matrix-rows mat1 ) ]
               [ cols1 ( matrix-cols mat1 ) ]
               [ rows2 ( matrix-rows mat2 ) ]
               [ cols2 ( matrix-cols mat2 ) ]
               [ res ( make-matrix rows1 cols2 ) ] )         
         ( unless ( = cols1 rows2 )
            ( match-error mat1 mat2 ) )        
         ( do ( [ r 0 ( + r 1 ) ] )
            ( ( = r rows1 ) res )
            ( do ( [ c 0 ( + c 1 ) ] )
               ( ( = c cols2 ) )
               ( do ( [ k 0 ( + k 1 ) ]
                      [ val 0 ( + val 
                                  ( * ( matrix-ref mat1 r k )
                                      ( matrix-ref mat2 k c ) ) ) ] )
                  ( ( = k rows2 )
                    ( matrix-set! res r c val ) ) ) ) ) ) ) )

( define mul 
   ( lambda ( x y )
      ( cond 
         [ ( number? x )
           ( cond 
              [ ( number? y )( * x y ) ]
              [ ( matrix? y )( mat-*-vec y x ) ]
              [ else ( type-error y ) ] ) ]
         [ ( matrix? x )
           ( cond 
              [ ( number? y )( mat-*-vec x y ) ]
              [ ( matrix? x )( mat-*-mat x y ) ]
              [ else ( type-error x ) ] ) ]
         [ else ( type-error x ) ] ) ) )


scheme 矩阵运算


推荐阅读
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 数字资产量化交易通过大数据分析,以客观的方式制定交易决策,有效减少人为的主观判断和情绪影响。本文介绍了几种常见的数字资产量化交易策略,包括搬砖套利和趋势交易,并探讨了量化交易软件的开发前景。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
author-avatar
常叽叽_655
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有